Inherited, overridden attribute type reverted to the top parent class type
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 20.6k
- Forks
- 3.3k
- Métriques de merge des PR
- Métriques de PR en attente
Description
The issue type is probably quite bad, but example should quickly clear things up:
class A:
attr = None
class B(A):
attr: str # type: ignore
class C1(B):
attr = "test"
class C2(B):
pass
class D(C2):
attr = "test"
mypy test.py outputs:
test.py:18: error: Incompatible types in assignment (expression has type "str", base class "A" defined the type as "None")
where line 18 is the last line of above example
As to why I do attr: str # type: ignore - in a nutshell, in my case A class comes from external source and they botched type hints there so I try to fix them in B. Not sure if it should have worked for C1, but if it did I see it breaking in D as a bug due mypy not being consistent, but then again maybe there is a good reason for it?.
Tested with mypy 0.720
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 l’exemple d’héritage fourni avec mypy 0.720 et comparez les diagnostics pour C1 et D. Suivez la résolution des types pour les attributs hérités et redéfinis, puis confirmez que le comportement obtenu est cohérent avec la sémantique prévue décrite dans l’issue.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- devtools
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100