python / python/mypy

Incompatible return value type `type[Enum]` when returning a functional-style Enum

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

Personne n'a encore pris cette issue.

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

Description

Bug Report
When returning a functional-style Enum class from a function with the return type type[Enum] mypy reports an error.

When the created Enum class is assigned to a variable and the variable is return, mypy does not report an error.

To Reproduce

from enum import Enum

def direct_return() -> type[Enum]:
    return Enum("direct", {"a": 0})    # error: Incompatible return value type (got "Enum", expected "type[Enum]")  [return-value]

def indirect_return() -> type[Enum]:
    indirect = Enum("indirect", {"a": 0})
    return indirect                    # no error as expected

Gist URL
Playground URL

Expected Behavior

no mypy warnings

Actual Behavior

main.py:4: error: Incompatible return value type (got "Enum", expected "type[Enum]") [return-value]

Your Environment

  • Mypy version used: 1.9.0 and master on mypy-play.net
  • Mypy command-line flags: mypy-play.net defaults
  • Mypy configuration options from mypy.ini (and other config files): mypy-play.net defaults
  • Python version used: 3.12

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 reproduire les exemples direct_return et indirect_return avec mypy 1.9.0 ou master, en utilisant comme référence le comportement du playground lié. Suivez la manière dont les appels à Enum de style fonctionnel sont inférés dans le vérificateur de types, puis ajoutez un test de régression montrant que les deux fonctions retournent sans avertissements.

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é
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
48/100

Recevez les nouvelles issues par e-mail

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