Enums with only descriptor members should not be final
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
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
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne damit, das gemeldete Beispiel mit mypy 0.941 zu reproduzieren, und verfolge dann die Enum-Analyse, die entscheidet, ob Foo bereits vorhandene Member hat. Das Issue ist abgeschlossen, wenn ein Enum, das nur Deskriptoren enthält, ohne Fehler abgeleitet werden kann, während Enums mit tatsächlichen Membern die bestehende Einschränkung beibehalten.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- devtools
- Issue-Typ
- Bug
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 48/100