PEP-681 - Inheriting class doesn't recognize kw_only=True from parent class
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
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
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 riproduttore minimo in Python presente nell'issue e segui la gestione da parte di mypy di dataclass_transform di PEP 681 per le impostazioni kw_only ereditate. Confronta l'errore di ordinamento segnalato con il comportamento previsto, quindi aggiungi un test di regressione per questo riproduttore ed esegui la suite di test pertinente per confermare che non venga segnalato alcun errore.
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
- 35/100