特征枚举值
我在一个类里设置枚举值的时候遇到了一些麻烦...
如果我在iPython窗口里:
eTest = Enum('zero', 'one', 'two', 'three')
我可以这样做:
eTest.value = eTest.values[2]
然后用 print eTest.value
可以得到正确的答案:二
我在一个Python类里尝试同样的事情,但它告诉我:
AttributeError: 'str' object has no attribute 'values'
我该怎么做才能把eTest设置为枚举的[3]值,而不需要输入'三'这个词呢?
1 个回答
8
你不能这样使用 Enum
对象。Enum
对象其实是一种声明方式,它告诉 HasTraits
类,拥有这些枚举的地方要创建一个实例属性,这个属性会进行特定的验证。这个实例属性不会是一个 Enum
对象,而是枚举中定义的某个值。你之前在 Enum
对象上修改的 .value
属性只是改变了默认值,这并不是你在对象的生命周期中设置的东西。
from traits.api import Enum, HasTraits, TraitError
ETEST_VALUES = ['zero', 'one', 'two', 'three']
class Foo(HasTraits):
eTest = Enum(*ETEST_VALUES)
f = Foo()
assert f.eTest == 'zero'
f.eTest = 'one'
f.eTest = ETEST_VALUES[3]
try:
f.eTest = 'four'
except TraitError:
print 'Oops! Bad value!'
我怎么才能让 eTest 拥有枚举中的 [3] 值,而不需要输入 'three' 这个词呢?
你可以参考我上面的例子,把列表和 Enum()
调用分开,当需要的时候直接索引这个列表就可以了。