PEP-681 - Inheriting class doesn't recognize kw_only=True from parent class
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug Report
A class inheriting a class with kw_only=True and using a dataclass_transform doesn't recognize kw_only being set, even though in runtime it does not yield an error. Originally found in sqlalchemy's usage (https://github.com/sqlalchemy/sqlalchemy/issues/11485)
To Reproduce
from typing import Optional, Any
import typing_extensions
def field(default: Any=None, init: bool=True, repr: bool=True) -> Any:
pass
@typing_extensions.dataclass_transform(
field_specifiers=(
field,
)
)
class ModelMeta(type):
pass
class ModelBase(metaclass=ModelMeta):
def __init_subclass__(cls, kw_only: bool=False) -> None:
pass
class Base(ModelBase, kw_only=True):
pass
class Vehicle(Base):
b: Optional[str] = field(default=None)
c: int
Expected Behavior
No error.
Actual Behavior
error: Attributes without a default cannot follow attributes with one [misc]
Found 1 error in 1 file (checked 1 source file)
Your Environment
- Mypy version used: 1.10
- Mypy command-line flags:
- Mypy configuration options from
mypy.ini(and other config files): - Python version used: 3.12
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 mit dem minimalen Python-Reproduzenten im Issue und verfolge mypy's Verarbeitung von PEP 681 dataclass_transform für geerbte kw_only-Einstellungen. Vergleiche den gemeldeten Reihenfolgefehler mit dem erwarteten Verhalten, füge anschließend einen Regressionstest für diesen Reproduzenten hinzu und führe die relevante Testsuite aus, um zu bestätigen, dass kein Fehler gemeldet 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
- 35/100