2016-04-28 29 views
0

這裏是我的簡化代碼:當我綁定到AliasProperty時會發生什麼?

class Player(Widget): 
    _health = NumericProperty(100) 

    def _get_health(self): 
     return self._health 

    health = AliasProperty(_get_health, bind=['_health']) 

我這樣做是爲了使health '只讀'。

奇怪的是,當我刪除bind=['_health']時,它不起作用。

所以我的問題是:bind=['_health']實際上做了什麼?我知道AliasProperty允許我定義一個getter和可選setter,它在該屬性被訪問時運行(類似於Python的@property)。

那麼在這種情況下,爲什麼bind=['_health'],以及爲什麼該屬性不起作用(不反映底層_health的狀態)?

回答

1

bind自變量告訴屬性引擎哪個其他屬性要監視更改,因爲它們與AliasProperty正在考慮的相關。

讓我們從文檔的(簡化的)例子:

def get_right(self): 
    return self.x + self.width 
right = AliasProperty(get_right, bind=['x', 'width']) 

這裏,right依賴於其他兩個屬性。如果我們只寫了bind=['x'],那麼只有改變x將導致觸發爲right更改事件,而到width變化將被忽略(但是,如果改變width後更改x發生,與預期值的事件將被解僱,如果該值是手動檢索,那麼也是正確的)。

+0

我明白了。當'right''改變'時,除非我們明確指定我們依賴於'x'和'width',否則什麼也不知道,在這種情況下,當別名屬性改變時會引發別名屬性事件。 謝謝:) –

相關問題