Traits Enum值

Ste*_*063 3 python enthought

我无法将枚举值设置为其中一个可能的类...

如果我在iPython窗口中:

eTest = Enum('zero', 'one', 'two', 'three')
Run Code Online (Sandbox Code Playgroud)

我可以:

eTest.value = eTest.values[2]
Run Code Online (Sandbox Code Playgroud)

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

我在python类中尝试相同的东西,它告诉我:

AttributeError: 'str' object has no attribute 'values'
Run Code Online (Sandbox Code Playgroud)

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

Rob*_*ern 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!'
Run Code Online (Sandbox Code Playgroud)

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

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