2009-04-08 17 views
27

Ich weiß um die __add__ Methode plus, außer Kraft zu setzen, aber wenn ich das verwenden + = außer Kraft zu setzen, habe ich am Ende mit einem von zwei Problemen auf:Gibt es eine Möglichkeit, + = in Python zu überladen?

(1), wenn __add__ selbst mutiert, dann

z = x + y 

mutiert x, wenn ich nicht möchte, dass x dort mutiert wird.

(2), wenn __add__ gibt ein neues Objekt, dann

tmp = z 
z += x 
z += y 
tmp += w 
return z 

wird, ohne etwas zurückgeben w da z und tmp Punkt auf verschiedene Objekte nach z += x ausgeführt wird.

Ich kann eine Art von .append() Methode machen, aber ich würde lieber += überlasten, wenn es möglich ist.

+10

Die Programmierer, die RTFM sind eine vom Aussterben bedrohte Art. – tzot

+2

@tzot in gewisser Weise, Sie betrachten die F'ing M. ;-) –

+0

Meinen Sie, dass Josh einer von Pythons manuellen Schreibern ist? Sorry, ich verstehe nicht, was du meinst, @ BobStein-VisiBone. – tzot

Antwort

50

Ja. Überschreiben Sie einfach die Methode __iadd__ des Objekts, die dieselben Parameter wie add verwendet. Sie finden weitere Informationen here.

+1

+1: Zitieren Sie die Dokumentation :-) –

Verwandte Themen