Eigenschaften in Python

7

Was ist der Grund, die Variable self._age zu verwenden? Ein ähnlicher Name, der nicht mit der bereits verwendeten self.age verknüpft ist?

%Vor%     
shawn 23.09.2010, 19:29
quelle

4 Antworten

11

self.age ist bereits von der Eigenschaft belegt, Sie müssen der tatsächlichen Variablen, die hier _age ist, einen anderen Namen geben.

Übrigens, seit Python 2.6 könntest du dies mit Dekoratoren schreiben:

%Vor%     
kennytm 23.09.2010, 19:37
quelle
6

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%     
Escualo 23.09.2010 19:49
quelle
4

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 kann

1) 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.

    
AndiDog 23.09.2010 19:42
quelle
0

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.

    
Mike Axiak 23.09.2010 19:32
quelle

Tags und Links