Mypy does not detect automatic init generation for fieldless dataclass inheriting from abstract base
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug Report
It appears that mypy ignores that the __init__ of dataclasses is automatically generated even when they have no fields.
To Reproduce
Consider the following abstract_dataclass.py MWE:
from abc import ABC, abstractmethod
from dataclasses import dataclass
class Foo(ABC):
@abstractmethod
def __init__(self) -> None: ...
def __post_init__(self) -> None:
print(f"Created '{self.__class__.__name__}' instance.")
@dataclass
class Bar(Foo): ...
@dataclass
class Baz(Foo):
a: int
Bar() # error: Cannot instantiate abstract class "Bar" with abstract attribute "__init__" [abstract]
Baz(a=3) # No error.
Running it, however:
python abstract_dataclass.py
Created 'Bar' instance.
Created 'Baz' instance.
Expected Behavior
No error should be identified.
Your Environment
- Mypy version used: 1.3.0
- Mypy command-line flags: None
- Mypy configuration options from
mypy.ini(and other config files): None - Python version used: 3.10.8
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Reproduziere das Problem mit dem bereitgestellten abstract_dataclass.py-Beispiel und dem normalen mypy-Testbefehl des Repositorys. Durchsuche die Dataclass-Verarbeitung und die Prüfungen abstrakter Klassen, um herauszufinden, wo der generierte init einer feldlosen Dataclass übersehen wird. Fertig ist es, wenn Bar() keinen Fehler wegen eines abstrakten init mehr meldet, während Baz(a=3) weiterhin die Typprüfung besteht.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- devtools
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 38/100