`@dataclass` does not handle `__hash__: None` special case
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
While working on https://github.com/python/mypy/issues/11463 I found that adding __hash__: None annotations does not work correctly.
Mypy says:
from dataclasses import dataclass
@dataclass(unsafe_hash=False, eq=True, frozen=False)
class SecondCase2:
x: int
__hash__: None # E: Incompatible types in assignment (expression has type "None", base class "object" defined the type as "Callable[[object], int]")
print(SecondCase2(1).__hash__) # N: Revealed type is "None" \
# E: Missing positional argument "__hash__" in call to "SecondCase2"
It looks like __hash__ is added to fields and __init__. While runtime version works just fine:
» python out/ex.py
SecondCase2(x=1, __hash__=<slot wrapper '__hash__' of 'object' objects>)
I will fix it in the same PR as https://github.com/python/mypy/issues/11463
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 il reproducer di dataclass fornito e confronta i diagnostic di mypy con il comportamento mostrato a runtime. Traccia il modo in cui i campi di dataclass e init gestiscono hash: None, quindi aggiungi una coverage che confermi che non viene trattato né come campo né come argomento del costruttore; controlla prima l'issue correlata #11463 perché il report indica che questo fix verrà incluso nello stesso PR.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- devtools
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 20/100