mypy fails to report missing "private" __x attribute
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Mypy doesn't seem to grok that self.__x in a subclass is different from self.__x in a superclass. It also doesn't seem to understand order of initialization.
- Are you reporting a bug, or opening a feature request?
bug
- Please insert below the code you are checking with mypy
class A:
def __init__(self, x: int) -> None:
self.__x = x # replace this with pass and mypy reports the error
class B(A):
def __init__(self) -> None:
A.__init__(self, self.__x)
B()
- What is the actual behavior/output?
$ mypy --strict tytest.py
Success: no issues found in 1 source file
$ python tytest.py
Traceback (most recent call last):
File "tytest.py", line 11, in <module>
B()
File "tytest.py", line 8, in __init__
A.__init__(self, self.__x)
AttributeError: 'B' object has no attribute '_B__x
- What is the behavior/output you expect?
mypy should report:
tytest.py:8: error: "B" has no attribute "__x
- What are the versions of mypy and Python you are using?
mypy 0.700
Do you see the same issue after installing mypy from Git master?
yes (mypy-0.770+dev.01ca4e062e38a9db8f462b9464fbbd5dd945a8cf)
- What are the mypy flags you are using? (For example --strict-optional)
--strict
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, das gemeldete tytest.py-Beispiel mit mypy --strict auszuführen und den akzeptierten Code mit Pythons AttributeError zu vergleichen. Lies die Pfade der Typprüfung für die Behandlung von Namen mit doppeltem Unterstrich und die Initialisierung von Instanzen; füge dann Tests hinzu, die private Attribute von Unter- und Oberklasse unterscheiden und das fehlende Attribut melden, bevor das Programm ausgeführt wird.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- compilers
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Ruhig
- Klarheit
- Klar beschrieben
- Anfängerfreundlichkeit
- 55/100