python / python/mypy

Detect undefined attribute in child class (when defined in parent)

Offen
#9,225 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

feature priority-1-normal
Vorherrschende Sprache
Python
Sterne
20.6k
Forks
3.3k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

mypy does not detect an undefined attribute in a child class if it is defined in a parent class.

Given the following code, where the __init__ of a child class forgets to call super().__init__:

class Base():
    def __init__(self, x: int) -> None:
        self.x = x
    def whatsx(self) -> int:
        return self.x

class Child(Base):
    def __init__(self, x: int) -> None:
        pass
        # Note: no call to super(), nor defining self.x.

c = Child(3)
print(c.whatsx())  # mypy does not catch undefined c.x

The real issue is obviously that the child class does not define the x attribute, failing Liskov.

Perhaps this is out-of-scope for mypy, but since programmers make stupid mistakes like this (/me raises hand), it would be awesome if mypy could warn about this error, making said programmers look less stupid ;)

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

Beginne damit, mypy auf dem bereitgestellten Base- und Child-Beispiel auszuführen, mit Fokus auf das untergeordnete init, das geerbte x-Attribut und den fehlenden Aufruf von super().init. Verfolge, wie mypy geerbte Attribute und Überschreibungen von Konstruktoren behandelt. Als abgeschlossen gilt die Aufgabe, wenn mypy zuverlässig vor der fehlenden Initialisierung warnt, ohne gültige Subklassen fälschlicherweise abzulehnen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
compilers
Issue-Typ
Feature
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

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