我想扩展Enum类并添加一个实用程序函数,该函数将被其他类利用。

考虑以下代码:

from enum import Enum

class BaseEnum(Enum):
    def get_items():
        print(__class__)
        return __class__.__members__.items()

class DerivedEnum(BaseEnum):
    X = 1
    Y = 2

print(BaseEnum.get_items())
print(DerivedEnum.get_items())


显然,这不符合预期,因为__class__始终引用BaseEnum

我知道我可以将代码更改为:

from enum import Enum

def get_enum_items(enum_class):
    return enum_class.__members__.items()

class AnotherEnum(Enum):
    X = 1
    Y = 2

    def get_items():
        return get_enum_items(__class__)

print(AnotherEnum.get_items())


这确实可以实现我想要的功能,但是要求我为我编写的所有Enum子类编写完全相同的方法。

Python中是否有类似__actual_class__的东西?我想可能需要制作类似虚拟静态方法的东西。

据我了解Enum类,我们实际上并未实例化它,因此我看不到使用对实例的引用(例如type(self))的方法。

最佳答案

似乎可以与classmethod一起使用:

from enum import Enum

class BaseEnum(Enum):
    @classmethod
    def get_items(cls):
        print(cls)
        return cls.__members__.items()

class DerivedEnum(BaseEnum):
    X = 1
    Y = 2

print(BaseEnum.get_items())
print(DerivedEnum.get_items())

09-25 18:55