Mypy does not honor implicitly abstract class in stubs; false positive about ABCMeta
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 45/100
Línea de trabajo
Empieza reproduciendo el problema con bar.py y foo.py; después, cambia el nombre de bar.py a bar.pyi y ejecuta mypy foo.py. Inspecciona mypy/semanal_classprop.py alrededor de las líneas 98-100 para entender el tratamiento de los stubs. Se considera terminado cuando el ejemplo basado en stubs no informa de ningún error de atributo abstracto, igual que en el caso de un módulo Python normal.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Bug Report
When analyzing stub files, mypy issues false positives when an implicitly abstract class inherits from abc.ABC rather than setting metaclass=ABCMeta:
To Reproduce
Have an implicitly abstract class in a file.
# bar.py
import abc
class A(abc.ABC): # same behavior as if using metaclass=abc.ABCMeta here
@abc.abstractmethod
def meth(self) -> None:
pass
class B(A): # at runtime B.__class__ shows the metaclass is abc.ABCMeta
pass
Import and subclass the implicitly abstract class
# foo.py
import bar
class C(bar.B):
def meth(self) -> None:
pass
$ mypy foo.py
Success: no issues found in 1 source file
Rename the imported module so it's a stub.
$ mv bar.py bar.pyi
Expected Behavior
$ mypy foo.py
Success: no issues found in 1 source file
Actual Behavior
$ mypy foo.py
bar.pyi:10: error: Class bar.B has abstract attributes "meth" [misc]
bar.pyi:10: note: If it is meant to be abstract, add 'abc.ABCMeta' as an explicit metaclass
Found 1 error in 1 file (checked 1 source file)
Mypy should emulate the runtime behavior and understand that B.__class__ is always going to be abc.ABCMeta.
Seems the bug is here: https://github.com/python/mypy/blob/master/mypy/semanal_classprop.py#L98-L100
Your Environment
- Mypy version used: 1.9
- Python version used: python 3.11
- Lenguaje dominante
- Python
- Estrellas
- 20.6k
- Forks
- 3.3k
- Merge medio
- 1 d 18 h
- PR fusionados (30 d)
- 54
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de python/mypy
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
-
documentation
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
bug topic-configuration topic-error-reporting
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Todos los issues de python/mypy
Issues similares
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
zostera/django-bootstrap4#894 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
use-agent-os/agent-os#3276 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
zephyrproject-rtos/zephyr#119726 ·
-
area/auth bug comp/agent P3 platform/discord type/security
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
NousResearch/hermes-agent#117848 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
zilliztech/memsearch#759 ·