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

これは、修正された質問に対する回答です。

クラス宣言時の List 特性の初期化は、その段階で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 に答える
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 に答える