python-动态创建的枚举的方法重载
作者:互联网
目标是使用动态创建的属性重载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的方法重载?
解决方法:
您的第三个代码段应为:
A.__str__ = lambda self: str(self.name)
注意我带了__class__.
标签:python-3-x,enums,overloading,python 来源: https://codeday.me/bug/20191109/2011665.html