Ich bin im Allgemeinen verwirrt über den Unterschied zwischen einer "Eigenschaft" und einem "Attribut" und kann keine großartige Ressource finden, um die Unterschiede genau zu beschreiben.
146
Eigenschaften sind eine besondere Art von Attribut. Grundsätzlich, wenn Python auf folgenden Code stößt:
spam = SomeObject()
print(spam.eggs)
es schaut nach oben eggs
in spam
und prüft dann , eggs
um zu sehen , ob es einen hat __get__
, __set__
oder __delete__
Verfahren - wenn es funktioniert, ist es eine Eigenschaft ist. Wenn es sich um eine Eigenschaft handelt, wird anstelle nur des eggs
Objekts (wie bei jedem anderen Attribut) die __get__
Methode aufgerufen (da wir nachgeschlagen haben) und alles zurückgegeben, was diese Methode zurückgibt.
Weitere Informationen zum Datenmodell und zu den Deskriptoren von Python .
Mit einer Eigenschaft haben Sie die vollständige Kontrolle über ihre Getter-, Setter- und Deleter-Methoden, die Sie nicht (wenn Sie keine Einschränkungen verwenden) mit einem Attribut haben.
quelle
x
. Einweg. Wenn der Benutzer der Klasse von _x erfährt, verwendet er es auf eigenes Risiko.Im Allgemeinen sind eine Eigenschaft und ein Attribut dasselbe. In Python gibt es jedoch einen Eigenschaftsdekorator, der Getter / Setter-Zugriff auf ein Attribut (oder andere Daten) ermöglicht.
quelle
Mit der Eigenschaft können Sie Werte wie normale Attribute abrufen und festlegen. Darunter befindet sich jedoch eine Methode, die aufgerufen wird, um sie in einen Getter und Setter für Sie zu übersetzen. Es ist wirklich nur eine Annehmlichkeit, die Kesselplatte von Calling Getter und Setter zu reduzieren.
Nehmen wir zum Beispiel an, Sie hatten eine Klasse, die einige x- und y-Koordinaten für etwas enthielt, das Sie brauchten. Um sie einzustellen, möchten Sie vielleicht etwas tun wie:
Das ist viel einfacher zu betrachten und zu überlegen als zu schreiben:
Das Problem ist, was ist, wenn sich Ihre Klasse eines Tages so ändert, dass Sie Ihr x und y um einen Wert versetzen müssen? Jetzt müssten Sie Ihre Klassendefinition und den gesamten Code, der sie aufruft, ändern, was sehr zeitaufwändig und fehleranfällig sein kann. Mit dieser Eigenschaft können Sie die erstere Syntax verwenden und gleichzeitig die Flexibilität der Änderung der letzteren erhalten.
In Python können Sie mit der Eigenschaftsfunktion Getter, Setter und Löschmethoden definieren. Wenn Sie nur die Eigenschaft read möchten, können Sie über Ihrer Methode auch einen @ property-Dekorator hinzufügen.
http://docs.python.org/library/functions.html#property
quelle
Zusammenfassend habe ich 2 Unterschiede zum Standort von Bernd Klein gelernt :
1. Eigenschaft ist eine bequemere Methode zur Datenkapselung.
Beispiel: Wenn Sie ein öffentliches Attribut mit der Länge "Objekt" haben, müssen Sie es später in Ihrem Projekt kapseln, dh: es in "privat" ändern und Getter und Setter bereitstellen => Sie müssen viele der zuvor geschriebenen Codes ändern:
Wenn Sie @property und @ lenght.setter => verwenden, müssen Sie diese alten Codes nicht ändern
2. Eine Eigenschaft kann mehrere Attribute kapseln
In diesem Beispiel
__physic_health
und__mental_health
privat ist und nicht direkt von außerhalb Seite zugegriffen werden kann, ist der einzige Weg , außerhalb des Unterrichts mit ihnen interagieren Throught Eigenschaftcondition
quelle
Es gibt auch einen nicht offensichtlichen Unterschied, den ich zum Zwischenspeichern oder Aktualisieren von Daten verwende. Oft haben wir eine Funktion, die mit dem Klassenattribut verbunden ist. Zum Beispiel muss ich die Datei einmal lesen und den dem Attribut zugewiesenen Inhalt beibehalten, damit der Wert zwischengespeichert wird:
Ausgabe:
Wir haben zweimal auf das Attribut zugegriffen, aber unsere Funktion wurde nur einmal ausgelöst. Wenn Sie das obige Beispiel so ändern, dass die Eigenschaft verwendet wird, wird der Wert jedes Mal aktualisiert, wenn Sie darauf zugreifen:
Ausgabe:
quelle