2013-07-31 16 views
2

這似乎是一個微不足道的任務,但我沒有找到解決方案。從Enthoughts特性到python本機對象的類型轉換

當使用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() 

人嗎?非常感謝。

回答

2

這是一個問題的修訂問題。

在類聲明時初始化列表特徵失敗,因爲在那個階段,test仍然是特徵實例。您需要的值僅在實例化類時創建(請參閱上一個答案)。

相反,你應該使用默認初始化爲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] 
+0

這樣做,謝謝。我不知道默認的初始化器。 – Chilichiller

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 
+0

我居然給示例代碼是在'HasTraits'類。這個想法是讓這個類創建一個List對象,它允許選擇未知數量的通道。由於數據將在對象生成後重新加載,因此此列表應該靈活。這就是爲什麼我想用'nChannels = Int(10)'做'Channels = List(list(numpy.arange(0,nChannels)))'的例子。然而,'arange'需要一個整數值,而不是'Int'。 – Chilichiller

+0

我修改了最初的問題,希望現在更清楚。謝謝你的幫助。 – Chilichiller