enumerating concrete subclasses of an abstract base class causes false positive "Cannot instantiate abstract class X with abstract attribute Y"
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 20.6k
- Fork
- 3.3k
- Metriche di merge delle PR
- Metriche PR in attesa
Descrizione
I have a number of concrete classes which all derive from the same abstract base class. Creating a list of instances using __subclasses__() in a list comprehension, mypy complains that I'm trying to instantiate the abstract class.
Simple example:
https://mypy-play.net/?mypy=latest&python=3.11&gist=f03c51fac1173ae0bb751b00e614de68
from abc import ABC, abstractmethod
from typing import List
class Animal(ABC):
@abstractmethod
def talk(self) -> str:
pass
class Dog(Animal):
def talk(self) -> str:
return "woof"
class Cat(Animal):
def talk(self) -> str:
return "miaow"
# enumerate using __subclasses__()
animals: List[Animal] = [
subclass() for subclass in Animal.__subclasses__()
]
print(animals)
# hard-coding subclass instances is fine
animals2: List[Animal] = [
Dog(), Cat()
]
Expected Behavior
As I'm not actually instantiating the abstract class, the mypy error looks like a false positive.
Your Environment
python 3.10.12
mypy v1.6.0
Possibly related issues
#15554
#14106
#3115
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia con l’esempio mypy-play nell’issue e riproduci la diagnostica per la list comprehension di subclasses(). Leggi le issue correlate #15554, #14106 e #3115 per il contesto esistente. Il lavoro è completato quando l’esempio non segnala più un errore di istanziazione di una classe astratta, mentre le istanziazioni effettive di classi astratte continuano a essere diagnosticate.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- tooling
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100