【发布时间】:2018-04-13 12:47:03
【问题描述】:
目标是使用动态创建的属性重载Enum 的__str__(self) 方法。
动态枚举可以用
创建[1]:
from enum import Enum, auto
A = Enum('A',
dict(('a_'+some_input, auto())
for some_input in ['1','2','3']),
module=__name__)
方法重载可以用
[2]:
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 访问的静态属性。
如何动态创建枚举的静态属性并重载超类Enum的方法?
【问题讨论】:
-
您能否详细说明“未能提供完整功能”
标签: python python-3.x enums overloading