Ich bin neu bei Python, also Entschuldigung im Voraus, wenn das eine dumme Frage ist.
Für eine Zuweisung muss ich erweiterte arithmetische Zuweisungen (+ =, - =, / =, * =, ** =,% =) für eine Klasse myInt überladen. Ich habe die Python-Dokumentation überprüft und das ist, was ich herausgefunden habe:
%Vor%self.a und other.a verweisen auf den in jeder Klasseninstanz gespeicherten int. Ich habe versucht, dies wie folgt zu testen, aber jedes Mal, wenn ich "None" anstelle des erwarteten Werts 5:
%Vor%Kann mir jemand sagen, warum das passiert? Vielen Dank im Voraus.
Sie müssen return self
zu Ihrer Methode hinzufügen. Erklärung:
Die Semantik von a += b
, wenn type(a)
eine spezielle Methode __iadd__
hat, wird wie folgt definiert:
Wenn also __iadd__
etwas anderes als self
zurückgibt, wird das nach dem Vorgang an den Namen a
gebunden. Wenn eine return
-Anweisung fehlt, entspricht die von Ihnen gepostete Methode einer mit return None
.
Erweiterte Operatoren in Python müssen den letzten Wert zurückgeben, der dem Namen zugewiesen wird, an dem sie aufgerufen werden, normalerweise (und in Ihrem Fall) self
. Wie bei allen Python-Methoden wird bei einer fehlenden return-Anweisung None
zurückgegeben.
Auch
Exception
, was unmöglich vernünftig zu fassen ist. Der Code dazu müsste except Exception
sagen, was alle Ausnahmen abfangen würde. In diesem Fall möchten Sie ValueError
oder TypeError
. type(foo) == SomeType
. In diesen (und praktisch allen) Fällen funktioniert isinstance
besser oder zumindest gleich. myInt
erstellen, sollten Sie ihn mit Großbuchstaben benennen, damit die Leute ihn als Klassennamen erkennen können. Tags und Links python operator-overloading operators