Enums with only descriptor members should not be final
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 20.6k
- Forks
- 3.3k
- Merge medio
- 1 d 18 h
- PR fusionados (30 d)
- 54
Descripción
Bug Report
If all members of an Enum class are descriptors, the class should still be subclassable.
Quote from the Python documentation:
The rules for what is allowed are as follows: names that start and end with a single underscore are reserved by enum and cannot be used; all other attributes defined within an enumeration will become members of this enumeration, with the exception of special methods (
__str__(),__add__(), etc.), descriptors (methods are also descriptors), and variable names listed in_ignore_.
This would also match the behaviour of Pyright (1.1.234)
To Reproduce
- Install
mypy==0.941 - Run
mypyon this code:
import logging
from enum import Enum
class LoggedAccess:
def __set_name__(self, owner, name):
self.public_name = name
self.private_name = '_' + name
def __get__(self, obj, objtype=None):
value = getattr(obj, self.private_name)
logging.info('Accessing %r giving %r', self.public_name, value)
return value
def __set__(self, obj, value):
logging.info('Updating %r to %r', self.public_name, value)
setattr(obj, self.private_name, value)
class Foo(Enum):
thing = LoggedAccess()
class Bar(Foo):
x = 42
Expected Behavior
No errors - this runs just fine
Actual Behavior
error: Cannot extend enum with existing members: "Foo"
Your Environment
- Mypy version used: 0.941
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.
Línea de trabajo
Empieza reproduciendo el ejemplo reportado con mypy 0.941 y, después, sigue el análisis del enum que decide si Foo tiene miembros existentes. El issue estará terminado cuando un enum que solo contiene descriptores pueda tener subclases sin error, mientras que los enums con miembros reales conserven la restricción existente.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- devtools
- Tipo de issue
- Error
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 48/100