gpt4 book ai didi

python - 枚举 KeyError 函数

转载 作者:行者123 更新时间:2023-12-01 01:55:44 27 4
gpt4 key购买 nike

我尝试使用其名称访问存储在枚举中的函数,但出现 KeyError:

from enum import Enum

def f():
pass

class MyEnum(Enum):
function = f

print MyEnum.function # <unbound method MyEnum.f>
print MyEnum['function'] # KeyError: 'function'

但是如果Enum不存储func,它就可以工作:

from enum import Enum

class MyEnum(Enum):
a = "toto"

print MyEnum.a # MyEnum.a
print MyEnum.a.value # "toto"
print MyEnum['a'] # MyEnum.a
print MyEnum.a.value # "toto"

我知道我可以使用 dict 而不是 Enum,但我想知道为什么 Enum 的行为不同。

最佳答案

分配函数与定义函数相同。如果您在 Enum 中定义函数,它将成为 Enum 的方法,并且不会被视为枚举的值。

以下枚举AB是完全等价的:

>>> from enum import Enum
>>>
>>> class A(Enum):
... a = 1
... def f(self):
... print('Hello')
...
>>> def x(self):
... print('Hello')
...
>>> class B(Enum):
... a = 1
... f = x
...
>>> B.f
<unbound method B.x>
>>> A.f
<unbound method A.f>
>>> A['a']
<A.a: 1>
>>> A['f']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/enum/__init__.py", line 384, in __getitem__
return cls._member_map_[name]
KeyError: 'f'
>>> B['a']
<B.a: 1>
>>> B['f']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/enum/__init__.py", line 384, in __getitem__
return cls._member_map_[name]
KeyError: 'f'

函数的处理方式有所不同,因为否则就不可能在枚举中定义自定义方法。

关于python - 枚举 KeyError 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50211614/

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