Einige objektorientierte Sprachen haben sogenannte private -Attribute, auf die von außerhalb der Klassenmethoden nicht zugegriffen werden kann. Dies ist wichtig, da einige Attribute nicht direkt geändert werden sollen, sondern sie als eine Funktion von etwas anderem geändert oder validiert werden sollen, bevor sie geändert werden. In Python haben Sie keine privaten -Attribute, aber Sie können etwas Ähnliches implementieren, indem Sie Getter und Setter für eine Variable verwenden, die mit Unterstrich beginnt - Pythons Konvention für private Methoden und Attribute.
Zum Beispiel. Die Hypotenuse eines rechtwinkligen Dreiecks wird durch h=sqrt(a*a+b*b)
angegeben, sodass Sie h
nicht direkt ändern können, da die Beziehung gelten muss. Sagt auch, dass ein Name mich im Format LASTNAME COMMA FIRSTNAME
haben muss, dann müssen Sie überprüfen, dass dies der Fall ist, bevor Sie self.lastname
zuweisen.
Der Property-Getter ermöglicht Ihnen, die Hypotenuse zu erhalten, verbietet Ihnen jedoch, sie festzulegen. Mit dem Eigenschaftensetter können Sie eine Eigenschaft festlegen, Sie können jedoch vor dem eigentlichen Festlegen der Eigenschaft Prüfungen durchführen.
Also:
%Vor%Ein anderes Beispiel:
%Vor%Ihr Beispiel ist eigentlich Unsinn, weil der Getter eine Konstante zurückgibt. Eine separate Variable mit Unterstrich, die normalerweise in Verbindung mit Eigenschaften verwendet wird, die
sein kann1) schreibgeschützt
%Vor% In diesem Fall kann instance.age
nur gelesen, aber nicht zugewiesen werden. Die Konvention besteht darin, intern nach self._age
zu schreiben.
2) Lesen-Schreiben
%Vor% Die Verwendung von getter und Setter ist nur dann sinnvoll, wenn Sie bei der Zuweisung des Werts zusätzliche Berechnungen oder Prüfungen durchführen müssen. Wenn nicht, können Sie die Variable einfach ohne den Unterstrich deklarieren, da auf Eigenschaften und Instanzvariablen in gleicher Weise (in Form von Code) zugegriffen wird. Deshalb müssen _age
und natürlich die Eigenschaft age
anders benannt werden.
Was du geschrieben hast, würde niemals in Python geschrieben werden. Häufig müssen jedoch beim Speichern einer Eigenschaft Aktionen ausgeführt werden (z. B. bei der Serialisierung), und dies kann transparent in einer Eigenschaft zwischengespeichert werden.
Da das Protokoll zum Aufrufen einer Eigenschaft und zum Zugreifen auf ein Element identisch ist, sollte der Python-Stil so lange wie möglich warten, um Elementvariablen in Eigenschaften umzuwandeln.
Tags und Links python