[PYTHON] Hinweise zum Hinzufügen von Setter und Deleter in einer abgeleiteten Klasse zur getter-Eigenschaft der Basisklasse

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

Hinweise zum Hinzufügen von Setter und Deleter in einer abgeleiteten Klasse zur getter-Eigenschaft der Basisklasse
Vorsichtsmaßnahmen beim Übergeben von def an sortierte und gruppierte Funktionen in Python? ??
Vorsichtsmaßnahmen beim Hinzufügen von Elementen mit DateField zu einem vorhandenen Modell später in Django
Unterschiede im Verhalten zwischen den Operatoren append () und "+ =" beim Hinzufügen von Daten zu einer Liste in Python
Setter und Getter
Tipps und Vorsichtsmaßnahmen beim Portieren von MATLAB-Programmen nach Python
Beispiel für das Abrufen des Modulnamens und des Klassennamens in Python