2

这似乎是一项微不足道的任务,但我仍然没有找到解决方案。

在使用 enthought.traits 的 API 并使用它们的数据类型(例如整数 Int)时,我如何将这些值类型转换为HasTraits类中的本机 python 对象。例如:

from traits.api import HasTraits, Int, List
class TraitsClass(HasTraits):
    test = Int(10)
    channel = List(range(0,test)) # this fails as range expects integers

我在课堂上尝试了以下内容,都产生了错误

test_int = int(test)
test_int = test.get_value()

有人对我有快速提示吗?非常感谢。

4

2 回答 2

2

您可以通过 访问您赋予特征的默认值test.default_value。但是,我怀疑这不是你想要做的......

在正常使用模式中,需要在HasTraits类中使用特征。当类被实例化时,特征被转换为常规的 Python 对象,使用一些机器来监听特征的变化等。

例如:

In [14]: from traits.api import HasTraits, Int

In [15]: class Test(HasTraits):
   ....:     x = Int(10)
   ....:     

In [16]: test = Test()

In [17]: test.x
Out[17]: 10

In [18]: type(test.x)
Out[18]: int
于 2013-07-31T14:06:10.857 回答
2

这是对修订后问题的回答。

在类声明时初始化 List trait 失败,因为在那个阶段,test它仍然是一个 Trait 实例。您需要的值仅在实例化类时创建(请参阅上一个答案)。

相反,您应该使用默认初始化程序channel

In [22]: from traits.api import HasTraits, Int, List

In [24]: class TraitsClass(HasTraits):
    test = Int(10)
    channel = List               
    def _channel_default(self):
        return range(0, self.test)
   ....:     

In [25]: t=TraitsClass()

In [26]: t.channel
Out[26]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
于 2013-07-31T16:23:26.737 回答