Traits Enum值

时间:2014-07-23 18:55:17

标签: python enthought

我无法将Enum值设置为其中一种可能性......

如果我在iPython窗口中:

eTest = Enum('zero', 'one', 'two', 'three')

我能做到:

eTest.value = eTest.values[2]

print eTest.value给了我正确答案:两个

我在python类中尝试同样的事情,它告诉我:

AttributeError: 'str' object has no attribute 'values'

如何设置eTest以获得Enums的[3]值而无需输入单词' three'?

1 个答案:

答案 0 :(得分:7)

您不能使用此类Enum个对象。 Enum对象只是一种声明,它告诉具有其中一个的HasTraits类创建一个执行特定验证的实例属性。此实例属性Enum对象:它将是枚举值之一。您在.value对象上修改的Enum属性只会更改默认值的内容。这不是你在对象生命周期中设置的东西。

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以获得Enums的[3]值而无需输入“three”这个词?

您可以按照上面的示例操作,将列表与Enum()调用区分开来,并在需要时将其编入索引。