Viele Programmiersprachen haben so etwas wie Enum. Es ist auch in Python. Sie können jeden "Wert" als Schlüssel erhalten, aber Sie können keinen anderen Wert als Schlüssel erhalten. Ich werde es vorstellen, weil es möglich war, die normale Aufzählung zu erweitern.
Lassen Sie uns zunächst überprüfen, wie Enum normal verwendet wird.
>>> from enum import Enum
>>>
>>> class Color(Enum):
... RED = 1
... GREEN = 2
... BLUE = 3
#Wenn Sie Enum wie oben deklarieren
#Sie können auf jedes Mitglied zugreifen, indem Sie einen Wert wie 1 oder 2 als Schlüssel verwenden.
>>> color = Color(1)
>>> print(color)
Color.RED
#Natürlich können Sie auch direkt darauf zugreifen
>>> print(Color.RED)
Color.RED
>>> print(color == Color.RED)
True
Sie könnten mit "Farbe (1)" auf "Color.RED" zugreifen, aber wenn Sie beispielsweise mit "Farbe (" rot ")" und "Farbe (" rot ")" zugreifen können, werden die Möglichkeiten von "Aufzählung" erweitert.
>>> from enum import Enum
>>>
>>> class Color(Enum):
... RED = 1
... GREEN = 2
... BLUE = 3
#Natürlich erhalte ich eine Fehlermeldung, wenn ich versuche, wie folgt darauf zuzugreifen
>>> color = Color('red')
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/lib/python3.6/enum.py", line 293, in __call__
return cls.__new__(cls, value)
File "/usr/local/lib/python3.6/enum.py", line 535, in __new__
return cls._missing_(value)
File "/usr/local/lib/python3.6/enum.py", line 548, in _missing_
raise ValueError("%r is not a valid %s" % (value, cls.__name__))
ValueError: 'red' is not a valid Color
>>> color = Color('rot')
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/local/lib/python3.6/enum.py", line 293, in __call__
return cls.__new__(cls, value)
File "/usr/local/lib/python3.6/enum.py", line 535, in __new__
return cls._missing_(value)
File "/usr/local/lib/python3.6/enum.py", line 548, in _missing_
raise ValueError("%r is not a valid %s" % (value, cls.__name__))
ValueError: 'rot' is not a valid Color
Lassen Sie uns nun die Implementierung von Enum überprüfen, die den Schlüssel erweitert.
#Zum Zeitpunkt der Erklärung wie folgt`_value2member_map_`Aktualisieren
>>> from enum import Enum
>>>
>>> class Color(Enum):
... def __new__(cls, value, en, ja):
... obj = object.__new__(cls)
... obj._value_ = value
... cls._value2member_map_.update({en: obj, ja: obj})
... return obj
... RED = (1, 'red', 'rot')
... GREEN = (2, 'green', 'Grün')
... BLUE = (3, 'blue', 'Blau')
#Damit wie bisher'red'Oder'rot'Wenn Sie mit zugreifen
>>> color = Color('red')
>>> print(color)
Color.RED
>>> red = Color('rot')
>>> print(red)
Color.RED
Wenn Sie es übertreiben, kann der Schlüssel getragen werden, aber ich denke, es ist wissenswert. Es scheint, dass es mit dem Typ int in der Datenbank und dem Typ str in der API verwendet werden kann.