[1.16 regression] Incompatible types error when using `Enum`s of a `NamedTuple`

Offen
#19,242 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
38/100
Issue-Typ
Bug
Klarheit
Größtenteils klar
Aktivitätsstatus
Veraltet
Tech-Stack
python
Bereich
compilers

Rechercherichtung

Beginne mit der verlinkten mypy-play-Reproduktion und dem eingebetteten Foo/FooEnum-Snippet und vergleiche mypy 1.15 mit 1.16 unter Python 3.13. Verfolge den Type-Checking-Pfad für Enum-Mitglieder, die von NamedTuple erben. Als abgeschlossen gilt die Aufgabe, wenn die Zuweisung wieder akzeptiert wird und die Regressionstests bestätigen, dass einfache Klassen und Dataclasses weiterhin unbeeinträchtigt sind.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

bug topic-enum

Bug Report

Seeing this regression on mypy 1.16 with Enums of NamedTuples values.

Note: Enums of plain classes or dataclasses work as expected.

To Reproduce

https://mypy-play.net/?mypy=1.16.0&python=3.13&flags=strict&gist=2c5d8ca22757aee67d917d8fec20ad7f

from enum import Enum
from typing import NamedTuple

class Foo(NamedTuple):
    pass

class FooEnum(Foo, Enum):
    ITEM = Foo()

foo: Foo = FooEnum.ITEM  # works on 1.15 but not 1.16

Actual Behavior

error: Incompatible types in assignment (expression has type "FooEnum", variable has type "Foo")  [assignment]

Your Environment

  • Mypy version used: 1.16
  • Mypy command-line flags: defaults
  • Mypy configuration options from mypy.ini (and other config files): none
  • Python version used: 3.13
Vorherrschende Sprache
Python
Sterne
20.6k
Forks
3.3k
Ø Merge
1 T. 18 Std.
Gemergte PRs (30 T.)
54

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus python/mypy

Alle Issues in python/mypy

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

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