Ja, für das ursprünglich veröffentlichte Beispiel funktioniert die Eigenschaft genauso wie eine Instanzvariable 'x'.
Dies ist das Beste an Python-Eigenschaften. Von außen funktionieren sie genau wie Instanzvariablen! Damit können Sie Instanzvariablen von außerhalb der Klasse verwenden.
Dies bedeutet, dass Ihr erstes Beispiel tatsächlich eine Instanzvariable verwenden könnte. Wenn sich die Dinge ändern und Sie sich dann dazu entschließen, Ihre Implementierung zu ändern und eine Eigenschaft nützlich ist, ist die Schnittstelle zur Eigenschaft von Code außerhalb der Klasse immer noch dieselbe. Eine Änderung von einer Instanzvariablen zu einer Eigenschaft hat keine Auswirkungen auf Code außerhalb der Klasse.
In vielen anderen Sprachen und Programmierkursen wird angewiesen, dass ein Programmierer niemals Instanzvariablen verfügbar machen und stattdessen "Getter" und "Setter" für jeden Wert verwenden sollte, auf den von außerhalb der Klasse zugegriffen werden kann, selbst in dem in der Frage angegebenen einfachen Fall.
Code außerhalb der Klasse mit vielen Sprachen (z. B. Java)
object.get_i()
#and
object.set_i(value)
#in place of (with python)
object.i
#and
object.i = value
Und bei der Implementierung der Klasse gibt es viele 'Getter' und 'Setter', die genau wie Ihr erstes Beispiel funktionieren: Replizieren Sie eine einfache Instanzvariable. Diese Getter und Setter sind erforderlich, da sich der gesamte Code außerhalb der Klasse ändern muss, wenn sich die Klassenimplementierung ändert. Mit Python-Eigenschaften kann Code außerhalb der Klasse jedoch mit Instanzvariablen identisch sein. Code außerhalb der Klasse muss also nicht geändert werden, wenn Sie eine Eigenschaft hinzufügen oder eine einfache Instanzvariable haben. So anders als die meisten objektorientierten Sprachen, für Ihr einfaches Beispiel Sie können das Instanz - Variable anstelle von ‚Getter‘ und ‚Setter‘ , die wirklich nicht benötigt werden, in dem Wissen sicher , dass , wenn Sie eine Immobilie in der Zukunft ändern, wird der Code unter Verwendung von Ihre Klasse muss sich nicht ändern.
Dies bedeutet, dass Sie nur dann Eigenschaften erstellen müssen, wenn ein komplexes Verhalten vorliegt. Für den sehr häufigen einfachen Fall, in dem, wie in der Frage beschrieben, lediglich eine einfache Instanzvariable erforderlich ist, können Sie einfach die Instanzvariable verwenden.