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