Wann sollten Attribute verwendet werden und wann sollten Eigenschaften in Python verwendet werden?

7

Nur eine kurze Frage, ich habe ein wenig Schwierigkeiten zu verstehen, wo man Eigenschaften verwendet, wo man alte Attribute verwendet. Die Unterscheidung zu mir ist ein wenig verschwommen. Alle Ressourcen zu diesem Thema wären hervorragend, danke!

    
Michael 10.06.2012, 10:08
quelle

4 Antworten

15

Eigenschaften sind flexibler als Attribute, da Sie Funktionen definieren können, die beschreiben, was beim Setzen, Abrufen oder Löschen geschehen soll. Wenn Sie diese zusätzliche Flexibilität nicht benötigen, verwenden Sie Attribute - sie sind einfacher zu deklarieren und schneller.

In Sprachen wie Java wird normalerweise empfohlen, immer Getter und Setter zu schreiben, um in Zukunft die Möglichkeit zu haben, diese Funktionen durch komplexere Versionen zu ersetzen. Dies ist in Python nicht notwendig, da die Syntax des Clientcodes für den Zugriff auf Attribute und Eigenschaften gleich ist. Sie können also jederzeit auswählen, Eigenschaften später zu verwenden, ohne die Rückwärtskompatibilität zu beeinträchtigen.

    
Sven Marnach 10.06.2012, 10:10
quelle
13

Der Punkt ist, dass die Syntax austauschbar ist. Beginnen Sie immer mit Attributen. Wenn Sie beim Zugriff auf ein Attribut zusätzliche Berechnungen benötigen, ersetzen Sie es durch eine Eigenschaft.

    
Daniel Roseman 10.06.2012 10:11
quelle
1

Eigenschaften sind Attribute + a posteriori Kapselung.

Wenn Sie ein Attribut in eine Eigenschaft umwandeln, definieren Sie einfach einen Getter und Setter , den Sie " anhängen, das wird den Datenzugriff haken . Dann müssen Sie den Rest Ihres Codes nicht neu schreiben, die Art des Zugriffs auf die Daten ist dieselbe, egal, welches Attribut eine Eigenschaft ist oder nicht.

Dank dieses sehr cleveren und leistungsfähigen Einkapselungsmechanismus können Sie in Python normalerweise Attribute verwenden (ohne a priori Kapselung, also ohne Getter nor Setter ), es sei denn, Sie müssen spezielle Dinge beim Zugriff auf die Daten tun.

Wenn ja, dann können Sie Setter und Getter nur bei Bedarf definieren und sie an das Attribut "anhängen", um es zu einer Eigenschaft zu machen, ohne dass es etwas gibt Auswirkung auf den Rest Ihres Codes (während in Java das erste, was Sie normalerweise tun, wenn Sie ein Feld , normalerweise privat , erstellen, ist das zugehörige Getter und Setter Methode).

Schöne Seite über Attribute, Eigenschaften und Deskriptoren hier

    
cedbeu 10.06.2012 12:55
quelle
0

Zusätzlich zu dem, was Daniel Roseman gesagt hat, verwende ich oft Eigenschaften, wenn ich etwas verpacke, d. h. wenn ich die Informationen nicht selbst speichere, sondern umwickelte Objekte. Dann sind Eigenschaften ausgezeichnete Accessoren.

    
Kugel 10.06.2012 11:38
quelle

Tags und Links