Detect undefined attribute in child class (when defined in parent)
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 20.6k
- Forks
- 3.3k
- Merge moyen
- 1 j 18 h
- PR mergées (30 j)
- 54
Description
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 ;)
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par exécuter mypy sur l’exemple fourni de Base et Child, en vous concentrant sur le init de l’enfant, l’attribut x hérité et l’appel manquant à super().init. Suivez la manière dont mypy gère les attributs hérités et les redéfinitions de constructeurs. C’est terminé lorsque mypy signale de manière fiable l’initialisation manquante sans rejeter à tort les sous-classes valides.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- compilers
- Type d'issue
- Fonctionnalité
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100