Fassen Sie Pythons @property Decorator zusammen

Hauptprämisse

class Man1():
    def __init__(self, name):
        self.name = name

Mit dieser Definition kann sowohl der Name der Instanzvariablen referenziert als auch neu geschrieben werden.

#Initialisieren
Paul = Man("Paul")

#Kann referenziert werden
print(Paul.name)
#Wiederbeschreibbar
Paul.name = Mac

Ich möchte eine private Variable wie realisieren

Aber eine Instanzvariable

In manchen Fällen. in diesem Fall,

#Stellen Sie die Instrumentenvariable voran__Definiert in(Dies__Der Name ist entstellt und dieser Name kann nicht referenziert werden)
class Man():
    def __init__(self, name):
        self.__name = name

    #Dieser Funktionsname sollte sich nicht mit einem vorhandenen Instanzvariablennamen überschneiden
    @property
    def name(self):
        return self.__name

    #Vor dem Setter muss der gleichnamige Getter definiert werden
    #Ohne diesen Setter wäre die Eigenschaft name schreibgeschützt
    @name.setter
    def name(self, name):
        self.__name = name

Durch

#Initialisieren
Paul = Man("Paul")

#Referenz
# Paul.name()ist nicht
print(Paul.name)

#Umschreiben
# Paul.name("Mac")ist nicht
Paul.name = "Mac"

#Kein direkter Zugang zum ursprünglichen Eigentum(Error)
Paul.__name
Paul.__name = "Mac"

Es ist jedoch möglich, auf die Instanzvariable __name mit Paul._Man__name zu verweisen und diese neu zu schreiben (also mock).

Recommended Posts

Fassen Sie Pythons @property Decorator zusammen
Property Decorator verwenden?
[Überarbeiteter] Eigenschaftsdekorator, der Werte zwischenspeichert
Dekorateur 1
Dekorateur 2
Dekorateur
Dekorateur