python / python/mypy

Confusing error message for a missing classmethod decorator

Aperta
#11,791 7 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

bug diagnostics topic-enum topic-error-reporting topic-inheritance
Lingua principale
Python
Stelle
20.6k
Fork
3.3k
Metriche di merge delle PR
Metriche PR in attesa

Descrizione

Please consider

import typing as tp
import enum

@enum.unique
class ColorIndex(enum.IntEnum):
    BLACK = 0
    GREY = 1
    WHITE = 2

    def _missing_(cls, value: object) -> tp.Any:
        return ColorIndex.BLACK

then mypy shows very confusing error (both signatures, for the subclass and the superclass, are the same)

$ mypy t.py
t.py:10: error: Signature of "_missing_" incompatible with supertype "Enum"
t.py:10: note:      Superclass:
t.py:10: note:          def _missing_(cls, value: object) -> Any
t.py:10: note:      Subclass:
t.py:10: note:          def _missing_(cls, value: object) -> Any
Found 1 error in 1 file (checked 1 source file)

The real issue is that _missing_ should be decorated with classmethod.

Python 3.10.1, mypy 0.930.

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia riproducendo l’esempio Python fornito con mypy e segui la diagnostica dell’override che segnala che le firme della superclasse e della sottoclasse sono identiche. Cerca i test di regressione esistenti relativi all’override dei metodi o alla gestione dei decorator. Il lavoro è completato quando la diagnostica spiega che missing richiede un decorator classmethod e l’esempio è coperto da un test.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
devtools
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.