我正在学习如何Enum在 Python 中使用类,并发现每当我需要访问枚举的实际值时,我都需要附加.value属性:
from enum import Enum
class Pets(Enum):
DOG = "Fido"
CAT = "Kitty"
Pets.DOG # yields Pets.DOG
Pets.DOG.value # yields Fido
作为练习,我正在尝试配置我的Enum类,这样我就不需要不断访问该value属性。我想要的行为是,当我打电话时Pets.DOG,我得到Fido了我的价值。
我试图实现这一点__getattr_(cls, item):
class Pets(Enum):
def __getattr__(self, item):
print(f"__getattr__ called with {item}")
return getattr(self, item).value
DOG = "Fido"
CAT = "Kitty"
if __name__ == "__main__":
pets = Pets()
pets.DOG
但是,我收到一个RecursionError: maximum recursion depth exceeded while calling a Python object, 并且item是_value_. 我不太明白为什么会发生这种行为 - 这是内置的 Python 行为,还是因为我使用了一个特殊的类Enum?
我确实看过类似的 SO 帖子,但是那里的解决方案是使用另一个模块 ( inspect),或者访问__dict__ordir()并使用条件或正则表达式的组合自己解析它。有没有更好的方法来获取底层证券Enum的价值?
交互式爱情
qq_花开花谢_0
相关分类