L'exemple suivant montre comment ajouter un setter dans une classe dérivée à la propriété getter «x» de la classe de base «Foo».
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
Lorsqu'il est exécuté, cela ressemble à ceci:
>>> b = Bar()
>>> b.x
"I'm Foo.x"
>>> b.x = "I'm Bar.x"
>>> b.x
"I'm Bar.x"
De plus, si vous souhaitez ajouter un suppresseur, écrivez comme suit.
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"
Une fois exécuté, ce sera comme suit.
>>> b = Bar()
>>> b.x
"I'm Foo.x"
>>> b.x = "I'm Bar.x"
>>> b.x
"I'm Bar.x"
>>> del b.x
'Nothing'
Notez que le dernier décorateur est @ x.deleter, pas @ Foo.x.deleter.
Si vous faites @ Foo.x.deleter, une propriété sans setter sera générée.
La méthode deleter de l'objet property renvoie un nouvel objet property avec la fonction d'argument ajoutée au deleter. Foo.x est un objet de propriété qui n'a qu'un getter
property avec une définition commençant par @ Foo.x.setter décorateur de Bar, avec getter et setter dans Bar.x
Puisque l'objet a été créé et attribué, @ x.deleter ajoutera le suppresseur en plus du getter et du setter.
référence
Recommended Posts