python / python/mypy

Class variable in multiple base classes incompatible

Ouverte
#17,079 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

bug
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

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. 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

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.