python / python/mypy

`@dataclass` does not handle `__hash__: None` special case

Offen
#11,495 0 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

bug topic-dataclasses
Vorherrschende Sprache
Python
Sterne
20.6k
Forks
3.3k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

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

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne mit dem bereitgestellten Dataclass-Reproducer und vergleiche die Diagnosen von mypy mit dem gezeigten Laufzeitverhalten. Verfolge, wie Dataclass-Felder und init hash: None behandeln, und füge Tests hinzu, die bestätigen, dass es weder als Feld noch als Konstruktorargument behandelt wird; prüfe zuerst das zugehörige Issue #11463, da der Bericht besagt, dass dieser Fix im selben PR landen wird.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
devtools
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
20/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.