gpt4 book ai didi

python - 派生 Enum 时使用 __class__ 获取属性

转载 作者:行者123 更新时间:2023-11-30 22:43:58 24 4
gpt4 key购买 nike

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

最佳答案

似乎可以使用类方法:

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())

关于python - 派生 Enum 时使用 __class__ 获取属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41634141/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com