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.
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.
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
Tags und Links python