Mein Code aufzurufen:Wie weiß Python Setter/Getter-Methoden mit
class MyClass:
def __init__(self):
self.value = 0
def set_value(self, value):
self.value = 5
def get_value(self):
return self.value
value = property(get_value, set_value)
a = MyClass()
ich folgende Ausgabe:
RecursionError: maximum recursion depth exceeded
Meine Frage: Warum ich diese Ausgabe erhalten? Warum ruft Python MyClass.value .__ set__ anstatt nur die Instanzvariable auf 0?
Ich meine, das Eigenschaft-Objekt ist eine Klassenvariable und bei der Initialisierung der a
-Instanz mache ich nichts mit der Klassenvariablen. Ich hoffe du weißt was ich meine.
Interessante Ausgabe, hätte ich nicht erwartet. Ich wollte nur hinzufügen, dass das "Problem", eine private Variable zu erstellen (durch "__value" ersetzt), das Problem löst. – Michael
@Michael, das macht es nicht privat, es nennt nur Mangles es. Solange das Attribut hinter der Eigenschaft einen anderen Namen hat (konventionell mit einem * einzigen * führenden Unterstrich, könnte aber etwas völlig anderes sein), gibt es keine Rekursion. – jonrsharpe
Es ruft 'MyClass.value .__ set__', weil * so die Eigenschaften funktionieren *. Andernfalls würden Sie die Eigenschaft sofort durch einen Wert ersetzen, sobald Sie ihr zugewiesen wurden. – jonrsharpe