python / python/mypy

Inherited, overridden attribute type reverted to the top parent class type

Ouverte
#7,394 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

bug false-positive priority-1-normal topic-inheritance
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

  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 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

Recevez les nouvelles issues par e-mail

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