关于 python 枚举类的一点疑问求大神解答??

2016-04-10 16:03:52 +08:00
 tetsuo
>>> from enum import Enum
>>> class Color(Enum):
... red = 1
... green = 2
... blue = 3
...
>>> print(Color.red)
Color.red

执行 print ( Color.red )为什么结果是 Color.red 而不是 1 ,还有 Enum 的所有实例都是单例,这个单例是什么意思?
修改
3158 次点击
所在节点    Python
11 条回复
sleshep
2016-04-10 16:10:30 +08:00
貌似有个__repr__属性
xiongbiao
2016-04-10 16:28:50 +08:00
Color.red.value
tetsuo
2016-04-10 16:46:10 +08:00
那 Color.red 到底是实例还是属性啊,还有枚举类和普通的类有什么区别,作用是什么??求大神解答
bp0
2016-04-10 16:47:01 +08:00
建议看看单例模式
zonghua
2016-04-10 16:57:22 +08:00
@tetsuo 类,类里面的变量是类自己实例化的自己。
xuyuxi
2016-04-10 17:14:56 +08:00
Color().red
congeec
2016-04-10 17:23:08 +08:00
@tetsuo
一楼说的对

```
>>> str(Color.red)
'Color.red'

>>> repr(Color.red)
'<Color.red: 1>'
```

https://docs.python.org/3/library/enum.html?highlight=enum#allowed-members-and-attributes-of-enumerations
为嘛不看文档?
qnnnnez
2016-04-10 17:53:25 +08:00
看了下代码,用的 metaclass 。

https://hg.python.org/cpython/file/3.5/Lib/enum.py#l82

简单地说,所有的 member 都被替换过了。
qnnnnez
2016-04-10 17:55:12 +08:00
Drifter
2016-04-10 20:42:45 +08:00
ryanking8215
2016-04-11 08:58:19 +08:00
class Color(enum.IntEnum)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/269947

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX