Class variable in multiple base classes incompatible
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
I'm getting a mypy error when I inherit from multiple base classes which define the same class variable.
A minimal script looks like:
class Obj:
...
class Left(Obj):
...
class Right(Obj):
...
class A:
val: Obj
class B(A):
val = Left()
class C(A):
val = Right()
class D(B, C):
...
The error I get is:
Definition of "val" in base class "B" is incompatible with definition in base class "C" [misc]
I was expecting there to be no error here. The following script works, for instance:
class Obj:
...
class Left(Obj):
...
class Right(Obj):
...
val: Obj
val = Left()
val = Right()
I can avoid the error by changing the definitions of B and C to:
class B(A):
val: Obj = Left()
class C(A):
val: Obj = Right()
But this seems redundant.
Environment
- Mypy version used: 1.9.0
- Mypy command-line flags: None
- Python version used: 3.11
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 le script minimal d’héritage multiple avec mypy 1.9.0 et comparez-le avec l’exemple fonctionnel d’affectation au niveau du module. Suivez le traitement des définitions héritées de variables de classe et confirmez que les affectations compatibles dans les sous-classes ne produisent plus l’erreur [misc] signalée, tandis que le contournement existant avec annotation reste valide.
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é
- Clairement spécifiée
- Accessibilité débutants
- 35/100