我想扩展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())