我在将 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 设置为具有枚举的 [3] 值而不必输入单词“三”?

最佳答案

您不能使用这样的 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!'



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

关于python - 特征枚举值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24918647/

10-12 12:33
查看更多