我可以添加名为'无'的值。一个枚举? 例如
from enum import Enum
class Color(Enum):
None=0 #represent no color at all
red = 1
green = 2
blue = 3
color=Color.None
if (color==Color.None):
#don't fill the rect
else:
#fill the rect with the color
这个问题与我之前的问题有关 How to set a variable's subproperty?
当然,我了解None
中的上述enum
并不起作用。
但是从供应商的代码中,我确实看到了这样的事情:
bird.eye.Color=bird.eye.Color.enum.None
我检查了type(bird.eye.Color)
这是一个<class 'flufl.enum._enum.IntEnumValue'>
所以使用flufl.enum
。我认为使用flufl.enum
或Enum
应该没有什么不同。
非常感谢!
答案 0 :(得分:2)
您可以使用Enum
构造函数执行此操作,而不是创建子类
>>> from enum import Enum
>>>
>>> Color = Enum('Color', {'None': 0, 'Red': 1, 'Green': 2, 'Blue': 3})
>>> Color.None
<Color.None: 0
编辑:这适用于python 2的enum34
backport。在python 3中,您将能够使用Enum
属性创建None
,但您不会能够使用点表示法访问。
>>> Color.None
SyntaxError: invalid syntax
奇怪的是,您仍然可以使用getattr
>>> getattr(Color, 'None')
<Color.None: 0>
答案 1 :(得分:1)
您不能直接执行此操作,因为分配给None
是语法错误。
也不应该动态地在枚举类上设置属性,因为这会干扰Enum
用于准备类的元类逻辑。
您应该使用小写名称none
来避免名称与python&#39; None
单例冲突。对于您所描述的用例,这种方法没有任何缺点。
答案 2 :(得分:-2)
不是你尝试的方式,但你可以这样做:
# After defining the class Color as normal, but excluding the part for None...
setattr(Color, 'None', 0)
color = Color.None
if color == Color.None:
...
注意:我在Python 2中做了这个。不确定你是否想在Python 2或3中使用它,因为你没有指定,而且我没有在这台机器上安装Python 3的副本来测试。< / p>