代码如下:
from enum import Enum
class EFoo(str, Enum):
A = 'e1'
B = 'e2'
print(EFoo.A)
d = {
EFoo.A : 'eA',
EFoo.B : 'eB'
}
first_key = list(d.keys())[0]
first_key_type = type(first_key)
print("Keys: " + str(d.keys()))
print("Type of first key: " + str(first_key_type))
print("d[EFoo.A] = '" + d[EFoo.A] + "'")
print("d['e1'] = '" + d['e1'] + "'")
下面是输出(Python3.5)
EFoo.A
Keys: dict_keys([<EFoo.A: 'e1'>, <EFoo.B: 'e2'>])
Type of first key: <enum 'EFoo'>
d[EFoo.A] = 'eA'
d['e1'] = 'eA'
现在字典键的类型是<enum 'EFoo'>
。
所以我不明白为什么通过字符串键访问字典的代码d['e1'] = 'eA'
起作用。
字符串“e1”是否转换为“EFoo”实例?Python是否做了一些反向查找以找到要转换为的正确枚举值?
此外,如果您将str
作为类的父级移除,从而使类声明看起来像class EFoo(Enum):
,则上述代码片段将不再工作
在这种情况下,从str
继承到底做了什么?
我猜枚举继承了
str
magic方法,所以:输出:
我想这将允许
dict
获取一个字符串参数并将其与一个键匹配。EFoo
继承自str
,因此是str
——这就是继承的工作原理。因为EFoo
继承自str
,它的所有成员都是str
s和Efoo
s,所以标准的str
操作工作:从
str
(或任何其他基类型)继承确实会删除Enum
中内置的一些安全性,因此您只应在必要时执行此操作(例如替换代码中已存在的该类型的常量)。相关问题 更多 >
编程相关推荐