我是python新手 - 抱歉,如果我的術語錯誤。我有一個繼承Enthought Traits attributes的類。下面是一個簡化的版本:在類構造函數中更改屬性參數[Python/Traits]
from enthought.traits.api import HasTraits, Range
from enthought.traits.ui.api import View, Item
class GUIThing(HasTraits):
my_slider = Range(0.0, 0.6, 0.1)
my_slider._high = 0.7 # works; not what I need 'coz not instance-dependent
view = View(Item('my_slider'))
def __init__(self, arg1):
# Call the parent's __init__
HasTraits.__init__(self)
self.my_slider._high = arg1 # what I need; doesn't work
# -- Main program -----
top_range = 0.9
my_gui = GUIThing(top_range)
my_gui.configure_traits()
這只是簡單地創建與它一slider一個窗口中,最初從0.0去0.6與初始值0.1。創建GUIThing實例時,我想根據當前值top_range
更改滑塊的最大值。然而,線
self.my_slider._high = arg1
導致
AttributeError: 'float' object has no attribute '_high'
當內__init__()
,self.my_slider
返回不滑塊對象,但滑塊的當前值。
我在做什麼錯?謝謝!
編輯:
下也不起作用:
class GUIThing(HasTraits):
def __init__(self, arg1):
# Call the parent's __init__
HasTraits.__init__(self)
self.my_slider = Range(0.0, arg1, 0.0)
view = View(Item('my_slider'))
這是做什麼,我試圖做直接的方式,但它會導致GUI哪裏而不是一個滑塊,有一個文本框中讀取「0xa61946c」enthought.traits.trait_types.Range對象。所以問題是,當在__init__()
內創建my_slider
時,那麼「my_slider」是指對象本身(它不能通過View正確顯示)。但如果在__init__()
之外創建my_slider
,則「my_slider」意味着當前值(防止訪問對象屬性的浮點數)。
不確定這是否是特徵特有的,或者我只是不知道如何正確初始化對象。
一般來說,在''_high''的前綴下劃線意味着它是私有的,你不應該像那樣訪問它。 – 2012-03-31 13:38:38
對,謝謝。但是我無法在文檔中找到如何訪問它。即使它不是正確的方式 - 它在'__init__'之外工作。所以我不明白爲什麼它在*'__init__'內不同*(另見編輯到OP)。 – Pteridium 2012-03-31 15:35:13
我的猜測(我不熟悉庫)是超類的__init __()''使用''Range'',但不參考它。如果這是真的,你有沒有嘗試在'__init __()'''內的'HasTraits .__ init __(self)'之前放置'self.my_slider = Range(0.0,arg1,0.0)''? – 2012-03-31 16:11:34