Ich habe eine Besonderheit im Python 3 Enums ( Link ) bemerkt.
Wenn Sie den Wert einer Enumeration auf eine Funktion setzen, wird verhindert, dass das Attribut als Enum-Objekt umgebrochen wird, wodurch Sie nicht in der Lage sind, die coolen Funktionen wie EnumCls['AttrName']
zum dynamischen Laden des Attributs zu verwenden.
Ist das ein Fehler? Fertig gemacht?
Ich habe eine Weile gesucht, aber keine eingeschränkten Werte gefunden, die Sie in einem Enum verwenden können.
Hier ist ein Beispielcode, der das Problem anzeigt:
%Vor%Auch das ist meine erste Frage, also lass es mich wissen, wenn ich etwas anders machen sollte! Und danke für die Hilfe!
Die Dokumentation lautet:
Die Regeln für das, was erlaubt ist, sind wie folgt:
_sunder_
Namen (beginnend und endend mit einem einzelnen Unterstrich) sind reserviert durch enum und können nicht verwendet werden; Alle anderen in einer Enumeration definierten Attribute werden Mitglieder dieser Enumeration, mit Ausnahme von__dunder__
Namen und Deskriptoren (Methoden sind auch Deskriptoren).
Eine "Methode" ist nur eine Funktion, die innerhalb eines Klassenkörpers definiert ist. Es spielt keine Rolle, ob Sie es mit lambda
oder def
definieren. Ihr Beispiel ist also dasselbe wie:
Mit anderen Worten, Ihre angeblichen Enum-Werte sind tatsächlich Methoden und werden daher nicht Mitglieder der Enum.
Tags und Links python enums python-3.x