2016-04-28 9 views
0

Hier ist meine vereinfachte Code:Was passiert, wenn ich eine AliasProperty anbinde?

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

    def _get_health(self): 
     return self._health 

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

ich das tat health 'nur lesbar' zu machen. Die seltsame Sache ist, es funktioniert nicht, wenn ich bind=['_health'] entferne.

Also meine Frage ist: Was macht bind=['_health'] eigentlich? Ich verstehe, AliasProperty ermöglicht es mir, einen Getter und optionale Setter zu definieren, die beim Zugriff auf die Eigenschaft ausgeführt werden (ähnlich Python @property).

Also was macht bind=['_health'] in diesem Fall, und warum funktioniert die Eigenschaft nicht (nicht den Zustand des zugrunde liegenden _health widerspiegeln), wenn ich es ausschließe?

Antwort

1

Das Argument bind teilt den Eigenschaften Engine andere Eigenschaften für Änderungen zu überwachen, weil sie für die AliasProperty in Betracht gezogen werden.

ist die (vereinfacht) Beispiel aus der Dokumentation Lassen Sie nehmen:

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

Hier right auf zwei weitere Eigenschaften beruht. Wenn wir nur bind=['x'] schrieben, würden nur Änderungen an x bewirken, dass ein Änderungsereignis für right ausgelöst wird, während Änderungen an width ignoriert würden (wenn jedoch nach einer Änderung an width eine Änderung an x auftritt, ein Ereignis mit dem erwarteten Wert wird ausgelöst, und wenn der Wert manuell abgerufen wird, wird es auch korrekt sein).

+0

Ich sehe. Wenn 'right' 'sich ändert, wird nichts darüber bekannt sein, außer wir spezifizieren explizit, dass wir von' x' und 'width' abhängig sind. In diesem Fall wird ein Ereignis für die Alias-Eigenschaft ausgelöst, wenn sie geändert werden. Danke :) –

Verwandte Themen