我想创建一个存储二进制值的枚举,但是我可以将任何值传递给它(它将存储value % 2
。]
即:我想使用Python3中的“官方” Enum
类型,但更改构造函数。
我尝试过此代码:]]
from enum import Enum class Color(Enum): black = 0 red = 1 def __new__(cls, value): super().__new__(cls, value % 2) def __str__(self): return self.name
但出现错误:
>>> from ZCasino import *
ValueError: 0 is not a valid Couleur
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/felix/Téléchargements/ZCasino.py", line 12, in <module>
class Couleur(Enum):
File "/usr/lib/python3.8/enum.py", line 212, in __new__
enum_member = __new__(enum_class, *args)
File "/home/felix/Téléchargements/ZCasino.py", line 18, in __new__
super().__new__(cls, value)
File "/usr/lib/python3.8/enum.py", line 595, in __new__
raise exc
File "/usr/lib/python3.8/enum.py", line 579, in __new__
result = cls._missing_(value)
File "/usr/lib/python3.8/enum.py", line 608, in _missing_
raise ValueError("%r is not a valid %s" % (value, cls.__name__))
ValueError: 0 is not a valid Couleur
我想创建一个存储二进制值的枚举,但是我可以将任何值传递给该枚举(它将存储值%2)。那就是:我想使用Python3中的“官方”枚举类型,但是要更改...
您需要重写__new__
方法之后
一种新的类方法可能比覆盖__new__
:]是一个更好的主意。
class Color(Enum):
black = 0
red = 1
@classmethod
def from_int(cls, x):
return cls(x%2)