目标是使用动态创建的属性重载__str__(self)
的{{1}}方法。
可以使用
创建动态枚举[1]:
Enum
方法重载可以用
完成[2]:
from enum import Enum, auto
A = Enum('A',
dict(('a_'+some_input, auto())
for some_input in ['1','2','3']),
module=__name__)
另外,两个例子都可以根据需要运作。结合两者我试过:
class A(Enum):
a_no_input = auto()
def __str__(self):
return str(self.name)
但这并没有改变[1]: ...
A.__class__.__str__ = lambda self: str(self.name)
的输出。
和
print(A.a_1)
但是这并没有创建可以通过class A(Enum):
def __init__(self):
super('A',
dict(('a_' + some_input, auto())
for some_input in ['1', '2', '3']),
module=__name__)
def __str__(self):
return str(self.name)
访问的静态属性。
如何动态创建枚举的静态属性并重载超类A.a_1
的方法?
答案 0 :(得分:2)
您的第三个代码段应为:
A.__str__ = lambda self: str(self.name)
注意我带了__class__
。
答案 1 :(得分:1)
另一种选择是[2] + [1]。枚举可以是子类,如果它们是空的:
from enum import Enum, auto
class EnumStr(Enum):
def __str__(self):
return str(self.name)
A = EnumStr('A',
dict(('a_'+some_input, auto())
for some_input in ['1','2','3']),
module=__name__)
print(A.a_1)