编程语言
首页 > 编程语言> > python-动态创建的枚举的方法重载

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