Confusing error message when assigning to `SomeType.__class__`
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 20.6k
- Fork
- 3.3k
- Metriche di merge delle PR
- Metriche PR in attesa
Descrizione
class X:
pass
X.__class__ = type
# Cannot assign to a method
# Incompatible types in assignment (expression has type "Type[type]", variable has type overloaded function)
Bug Report
X.__class__ isnt an overloaded function nor method, it is property defined in object class:
>>> object.__dict__['__class__']
<attribute '__class__' of 'object' objects>
Expected Behavior
I expect to get something like this:
Incompatible types in assignment (expression has type "type[type]", variable has type "type[type[X]]")
or
"X.__class__" doesnt support assignment
or
Cannot determine type of "X" after ".__class__" assignment
or
Cannot change type of class "X"
With variables it gives good error message:
class X: pass
class Y: pass
x = X()
x.__class__ = Y # Incompatible types in assignment (expression has type "Type[Y]", variable has type "Type[X]")
My Environment
mypy 0.961 (compiled: no)- no command-line flags, no config file
CPython 3.10.4- Windows 10
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia con la riproduzione minima dell’assegnazione di classe nel report e confrontala con l’esempio di assegnazione di istanza. Traccia la gestione da parte di mypy dell’assegnazione di __class__ e assicurati che il caso della classe produca una diagnostica di assegnazione specifica per il tipo o che indichi chiaramente che l’assegnazione non è supportata, senza identificare erroneamente __class__ come un metodo.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- tooling
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 45/100