Sal*_*dar 4 python enums constructor overriding python-3.x
我想创建一个存储二进制值的枚举,但我可以向其传递任何值(它将存储value % 2)。
也就是说:我想使用EnumPython3 中的“官方”类型,但更改构造函数。
我尝试了这段代码:\xc2\xa0
\n\nfrom enum import Enum\n\nclass Color(Enum):\n black = 0\n red = 1\n\n def __new__(cls, value):\n super().__new__(cls, value % 2)\n\n def __str__(self):\n return self.name\nRun Code Online (Sandbox Code Playgroud)\n\n但我收到一个错误:
\n\n>>> from ZCasino import *\nValueError: 0 is not a valid Couleur\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "<stdin>", line 1, in <module>\n File "/home/felix/T\xc3\xa9l\xc3\xa9chargements/ZCasino.py", line 12, in <module>\n class Couleur(Enum):\n File "/usr/lib/python3.8/enum.py", line 212, in __new__\n enum_member = __new__(enum_class, *args)\n File "/home/felix/T\xc3\xa9l\xc3\xa9chargements/ZCasino.py", line 18, in __new__\n super().__new__(cls, value)\n File "/usr/lib/python3.8/enum.py", line 595, in __new__\n raise exc\n File "/usr/lib/python3.8/enum.py", line 579, in __new__\n result = cls._missing_(value)\n File "/usr/lib/python3.8/enum.py", line 608, in _missing_\n raise ValueError("%r is not a valid %s" % (value, cls.__name__))\nValueError: 0 is not a valid Couleur\nRun Code Online (Sandbox Code Playgroud)\n
Eth*_*man 15
您可以利用新_missing_方法:
from aenum import Enum
class Color(Enum):
black = 0
red = 1
#
def __str__(self):
return self.name
#
@classmethod
def _missing_(cls, value):
return cls(value % 2)
Run Code Online (Sandbox Code Playgroud)
并在使用中:
>>> list(Color)
[<Color.black: 0>, <Color.red: 1>]
>>> Color(3)
<Color.red: 1>
>>> Color(8)
<Color.black: 0>
Run Code Online (Sandbox Code Playgroud)
_missing_在 Python 3.6 中引入。如果您需要支持早期的 Python,您可以使用1库。aenum
注意:当调用时,Color(7)您不是创建一个新的,而是获取创建 Enum 本身时创建的Color现有的。<Color.black: 0>
1声明:我是Python stdlibEnum、enum34backport和Advanced Enumeration ( aenum)库的作者 。
| 归档时间: |
|
| 查看次数: |
4839 次 |
| 最近记录: |