Das folgende Beispiel zeigt, wie ein Setter in einer abgeleiteten Klasse zur Getter-Eigenschaft x
der Basisklasse Foo
hinzugefügt wird.
class Foo:
def __init__(self):
self._x = "I'm Foo.x"
@property
def x(self):
return self._x
class Bar(Foo):
@Foo.x.setter
def x(self, value):
self._x = value
Beim Ausführen sieht es so aus:
>>> b = Bar()
>>> b.x
"I'm Foo.x"
>>> b.x = "I'm Bar.x"
>>> b.x
"I'm Bar.x"
Wenn Sie einen Deleter hinzufügen möchten, schreiben Sie außerdem wie folgt.
class Foo:
def __init__(self):
self._x = "I'm Foo.x"
@property
def x(self):
return self._x
class Bar(Foo):
@Foo.x.setter
def x(self, value):
self._x = value
@x.deleter
def x(self):
self._x = "Nothing"
Bei der Ausführung ist dies wie folgt.
>>> b = Bar()
>>> b.x
"I'm Foo.x"
>>> b.x = "I'm Bar.x"
>>> b.x
"I'm Bar.x"
>>> del b.x
'Nothing'
Beachten Sie, dass der letzte Dekorateur "@ x.deleter" ist, nicht "@ Foo.x.deleter". Wenn Sie "@ Foo.x.deleter" ausführen, wird eine Eigenschaft ohne Setter generiert.
Die Deleter-Methode des Property-Objekts gibt ein neues Property-Objekt mit der dem Deleter hinzugefügten Argumentfunktion zurück. Foo.x
ist ein Eigenschaftsobjekt, das nur Getter hat
property
mit einer Definition, die mit @ Foo.x.setter
Dekorateur von Bar
beginnt, mit Getter und Setter in Bar.x
Da das Objekt erstellt und zugewiesen wurde, fügt @ x.deleter
den Deleter zusätzlich zu Getter und Setter hinzu.
Referenz
Recommended Posts