Inconsistent errors with superclass Liskov violations
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
- Are you reporting a bug, or opening a feature request?
Bug report
class ParentA:
def get_description(self, s: str): ...
class ParentB:
def get_description(self, i: int): ...
# This is a Liskov violation and needs to be ignored.
class ParentViolation(ParentA, ParentB): # type: ignore
...
class ShouldBeIrrelevant:
...
# Inheriting from a violating parent, showing no error
class NoViolation(ParentViolation):
...
# Inheriting from a violating parent, but an extra class makes a violation appear
class SpuriousViolation(ParentViolation, ShouldBeIrrelevant):
...
- What is the actual behavior/output?
The NoViolation class line has no errors.
The SpuriousViolation class line has an error of:
error: Definition of "get_description" in base class "ParentA" is incompatible with definition in base class "ParentB"
- What is the behavior/output you expect?
Either they should both error, or neither should. Personally, I would prefer it if neither errored, since the Liskov violation has already been explicitly ignored by the ParentViolation class. However, I also don't have enough context to know whether this is actually the correct solution.
- What are the versions of mypy and Python you are using?
Do you see the same issue after installing mypy from Git master?
mypy 0.720, and verified with mypy 0.730+dev.17a93eac7d1d78e31fc9b347682d86d8d53fe02b
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
Exécutez l’extrait Python fourni avec mypy 0.730+dev et comparez les diagnostics sur les lignes de classe NoViolation et SpuriousViolation. Suivez la manière dont le checker gère la ParentViolation ignorée et les définitions héritées de la superclasse ; l’issue est terminée lorsque les deux cas reçoivent un traitement cohérent, avec un test de régression couvrant les deux exemples.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- compilers, 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