我正在玩枚举。特别是,我从enum
文档中获取了这段代码:
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
然后,在dir()
上致电Color.RED
:
In [2]: dir(Color.RED)
Out[2]: ['__class__', '__doc__', '__module__', 'name', 'name', 'value', 'value']
如您所见,有两个相同的属性 - name
和value
。
来自dir()
的文档:
[...]使用参数,尝试返回有效属性列表 那个对象。
那么为什么dir
注册Color.RED
具有相同名称的相同属性以及它们有何区别?
答案 0 :(得分:2)
dir(thing)
基本上只是sorted(thing.__dir__())
,而thing.__dir__
几乎可以返回任何内容。枚举有一个自定义__dir__
实现,已经更改了几次;在3.4中,that __dir__
implementation意外地将'name'
和'value'
放入列表中两次,一次是明确的,一次来自MRO搜索。