No-field class derived from `dataclass_transform` base class uses base class's constructor signature
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug Report
When a class derives from a base class marked with dataclass_transform and the derived class has no fields, mypy incorrectly infers that the derived class does not provide its own constructor. This issue does not happen if the derived class has any fields.
Pyright infers the correct constructor signature here.
To Reproduce
from typing import dataclass_transform, reveal_type
@dataclass_transform()
class Base:
def __init__( self, a: int ) -> None:
pass
class DerivedNoFields( Base ):
pass
class DerivedWithFields( Base ):
b: str
reveal_type( DerivedNoFields.__init__ )
reveal_type( DerivedWithFields.__init__ )
Expected Behavior
main.py:14: note: Revealed type is "def (self: __main__.DerivedNoFields)"
main.py:15: note: Revealed type is "def (self: __main__.DerivedWithFields, b: builtins.str)"
Actual Behavior
main.py:14: note: Revealed type is "def (self: __main__.Base, a: builtins.int)"
main.py:15: note: Revealed type is "def (self: __main__.DerivedWithFields, b: builtins.str)"
Your Environment
- Mypy version used: 3.16.1
- Python version used: 3.13
- No command-line flags or configuration options
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
Beginne damit, die main.py-Reproduktion aus dem Issue oder dessen mypy-play-Link auszuführen, und vergleiche die beiden reveal_type-Ergebnisse. Verfolge den Einstiegspunkt für die Konstruktor-Synthese von dataclass_transform und die vorhandenen Tests. Füge anschließend Abdeckung für die abgeleitete Klasse ohne Felder hinzu; fertig ist es, wenn DerivedNoFields.__init__ nur self enthält, während der Fall mit Feldern unverändert bleibt.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- compilers
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 48/100