Automatisches festlegen einer enum-Mitglied Wert auf seinen Namen

Ich ve wurde Herumspielen mit python-enum-Bibliothek und haben sich über ein Rätsel. In den docs, Sie zeigen ein Beispiel für eine die automatische Nummerierung von enum, wobei etwas definiert ist:

class Color(AutoNumber):
    red = ()
    green = ()
    ...

Möchte ich eine ähnliche Klasse, aber der Wert würde automatisch aus dem Namen des Elements UND halten Sie die Funktionalität, die Sie tun, die str und enum mixin Zeug

So etwas wie:

class Animal(MagicStrEnum):
    horse = ()
    dog = ()

Animal.dog == 'dog' # True

Ist, habe ich mich an den Quellcode des enum-Modul und versucht, eine Menge von Variationen Herumspielen mit __new__ und die EnumMeta Klasse

  • meinst du Animal.dog.value == 'dog'?
  • Verwandte: acooke.org/cute/Pythonssad0.html
  • Ich denke, es könnte getan werden, indem geändert wird, EnumMeta._create_() in enum.py (hg.python.org/cpython/file/3.4/Lib/enum.py#l295, jedoch nicht sofort überschrieben aufgrund ValueError auf sundered Namen aus _is_sunder() um den code. Allerdings, wenn Namen = ['rot','grün','blau'] ein und Farbe = Enum('Color', names=zip(Namen,Namen)), dann Farbe.rot.Wert == 'rot', Farbe.grün.Wert == 'grün' und Farbe.blau.Wert == 'blau'.
  • Was versuchst du hier zu tun?
Schreibe einen Kommentar