`dir()`显示具有重复属性的枚举元素(python3.4)

时间:2017-08-02 04:43:26

标签: python enums

我正在玩枚举。特别是,我从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']

如您所见,有两个相同的属性 - namevalue

来自dir()的文档:

  

[...]使用参数,尝试返回有效属性列表   那个对象。

那么为什么dir注册Color.RED具有相同名称的相同属性以及它们有何区别?

1 个答案:

答案 0 :(得分:2)

dir(thing)基本上只是sorted(thing.__dir__()),而thing.__dir__几乎可以返回任何内容。枚举有一个自定义__dir__实现,已经更改了几次;在3.4中,that __dir__ implementation意外地将'name''value'放入列表中两次,一次是明确的,一次来自MRO搜索。