De nombreux langages de programmation ont quelque chose appelé Enum. C'est aussi en Python. Vous pouvez obtenir chaque «valeur» en tant que clé, mais vous ne pouvez obtenir aucune autre valeur en tant que clé. Je vais l'introduire car c'était possible en étendant le Enum normal.
Voyons d'abord comment utiliser Enum normalement.
>>> from enum import Enum
>>>
>>> class Color(Enum):
... RED = 1
... GREEN = 2
... BLUE = 3
#Si vous déclarez Enum comme ci-dessus
#Vous pouvez accéder à chaque membre en utilisant une valeur telle que 1 ou 2 comme clé.
>>> color = Color(1)
>>> print(color)
Color.RED
#Bien sûr, vous pouvez également y accéder directement
>>> print(Color.RED)
Color.RED
>>> print(color == Color.RED)
True
Vous pouvez accéder à Color.RED
avec Color (1)
, mais si vous pouvez accéder avec Color ('red') ʻet
Color ('red') par exemple, les possibilités de ʻEnum
s'élargiront.
>>> from enum import Enum
>>>
>>> class Color(Enum):
... RED = 1
... GREEN = 2
... BLUE = 3
#Bien sûr, j'obtiens une erreur lorsque j'essaye d'accéder comme ci-dessous
>>> 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('rouge')
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: 'rouge' is not a valid Color
Maintenant, vérifions l'implémentation d'Enum qui étend la clé.
#Au moment de la déclaration, comme suit`_value2member_map_`Mettre à jour
>>> 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', 'rouge')
... GREEN = (2, 'green', 'vert')
... BLUE = (3, 'blue', 'Bleu')
#Avec ça comme avant'red'Ou'rouge'Lorsque vous accédez avec
>>> color = Color('red')
>>> print(color)
Color.RED
>>> red = Color('rouge')
>>> print(red)
Color.RED
Si vous en faites trop, la clé peut être usée, mais je pense que cela vaut la peine de le savoir. Il semble qu'il puisse être utilisé avec le type int dans DB et le type str dans l'API.
Recommended Posts