python / python/mypy

mypy doesn't infer **kwargs types from superclass

Ouverte
#10,079 5 commentaires 16 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

feature topic-inference topic-inheritance
Langage dominant
Python
Étoiles
20.6k
Forks
3.3k
Métriques de merge des PR
Métriques de PR en attente

Description

Bug Report
If a subclass __init__ passes **kwargs to it's superclass, the superclasses parameter types should be used to validate the subclass arguments.

To Reproduce

Run mypy on this file:

import datetime


class Bar:
    def __init__(self, a: int, b: str, c: datetime.datetime):
        pass


class Baz(Bar):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)


Baz(b=3)

Expected Behavior

Something like
error: Argument "b" to "Baz" has incompatible type "int"; expected "str"

Actual Behavior

mypy found no errors

Your Environment

  • Mypy version used: mypy 0.800
  • Mypy command-line flags: python filename
  • Mypy configuration options from mypy.ini (and other config files): none
  • Python version used: 3.8.6
  • Operating system and version: macOS 10.15.7

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 mypy sur le reproducteur Python de l’issue et comparez le comportement signalé avec l’erreur attendue pour Baz(b=3). Suivez le point d’entrée de la vérification des types pour les appels à init des sous-classes qui transmettent **kwargs, puis ajoutez ou mettez à jour la couverture pour cette divergence. C’est terminé lorsque les types d’arguments nommés incompatibles transmis à Baz sont signalés à l’aide des types de paramètres de la superclasse.

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
42/100

Recevez les nouvelles issues par e-mail

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