这是我的代码
#coding:utf8
from enum import Enum
class Color(Enum):
red=1
green=2
black=3
Color.red.price=30.0
Color.black.price=40.0
Color.green.price=40.0
Color.green.xxx = True
为什么color.red有这个属性,比如价格或xxx或其他什么? 谢谢你的回答
答案 0 :(得分:1)
Color.red
有一个price
属性,因为你给了它一个。 Enum
成员的唯一(大部分)不可变部分是name
和value
。
请注意,Color.red
没有xxx
属性,因为您只将该属性分配给Color.green
。
答案 1 :(得分:0)
在此示例中,Color
类对象不具有此类属性。
这里发生的是你正在创建那些属性,然后可以使用它。显然,python是动态的,东西允许这样的事情。
如果我们将对象视为值和引用的数组,那么您在此处所做的就是将另一个值(或引用)附加到当前对象。
我使用this online interpreter做了一个快速而又脏的例子:
from enum import Enum
class names(Enum):
Paul=1
Robert=2,
Jean=3,
Charles=4
names.Paul.price = 25
print(names.Paul.price) # works, as we just added the price poperty.
print(isinstance(names.Paul, names)) # returns true, we don't lose property.
print(names.Robert.price) # AttributeError, we didn't add it.
答案 2 :(得分:0)
这就像任何其他对象一样。您可以向类对象添加新属性(这些属性仅属于对象)
class A:
foo1="bar"
a=A()
a.foo2="bar2"
print(a.foo2)
print(A.foo1)
print(A.foo2) # gives an attribute error
如果是enum
from enum import Enum
class A(Enum):
.. a="enum"
..
每个成员都是一个枚举对象
dir(A.a)
=> ['__class__', '__doc__', '__module__', 'name', 'value']
dir(Enum)
=> ['__class__', '__doc__', '__members__', '__module__']
因此,就像任何其他类对象一样,您可以向对象添加属性
A.a.foo1="bar1"