python / python/mypy

`dataclass_transform` decorator not detected when using alias

Offen
#19,731 4 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

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

Beschreibung

Bug Report

I came across this while trying to conditionally use typing.dataclass_transform or typing_extensions.dataclass_transforms depending on the Python version running the code.

If one defines an alias for dataclass_transform, using the alias as a decorator does not result in the expected result (mypy does not recognize the decorated class as if being decorated with dataclass_transform)

To Reproduce

Playground link: https://mypy-play.net/?mypy=latest&python=3.12&gist=c88ba0d811ade24ad47f302dfdb5b6f7

import dataclasses
import typing

dataclass_transform = typing.dataclass_transform


@dataclass_transform()
def transform(cls, /, **kwargs):
    return dataclasses.dataclass(**kwargs)


@transform
class Example:
    field: int


Example(field=1)

Expected Behavior

No error, same as if typing.dataclass_transform was being used directly

Actual Behavior
Example is not recognized as a dataclass-like class:

main.py:17: error: Unexpected keyword argument "field" for "Example"  [call-arg]

Your Environment

  • Mypy version used: 1.17.1
  • Mypy command-line flags: none
  • Mypy configuration options from mypy.ini (and other config files): none
  • Python version used: 3.12

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

Reproduziere den Bericht im verknüpften mypy playground mit dem gezeigten Beispiel für Python 3.12 und bestätige den für main.py gemeldeten Fehler. Verfolge die Verarbeitung von dataclass_transform ausgehend von dieser Reproduktion; die Arbeit ist abgeschlossen, wenn das mit einem Alias dekorierte Example keinen Fehler erzeugt und Example(field=1) akzeptiert.

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
45/100

Neue Issues direkt in Ihr Postfach

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