动态创建的Enum的方法重载

时间:2018-04-13 12:47:03

标签: python python-3.x enums overloading

目标是使用动态创建的属性重载__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的方法?

2 个答案:

答案 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)