Die benutzerdefinierte Additionsmethode schlägt während der String-Interpolation fehl

8
%Vor%

Die Ausgabe dieses Programms ist

%Vor%

Aber es sollte

sein %Vor%

Aber wenn ich das tue

%Vor%

Es funktioniert perfekt

Ich möchte wissen, warum und wie man dieses Problem löst

ps. Entschuldigung, wenn mein Englisch schlecht ist:)

    
foxneSs 23.05.2012, 15:12
quelle

2 Antworten

17

Ihre Funktion __add__ ändert das linke Argument zu + . Zum Beispiel:

%Vor%

Sie sollten __add__ so ändern, dass es wie

aussieht %Vor%     
Dougal 23.05.2012, 15:17
quelle
3

Sie sagen, die Ausgabe sollte lauten:

%Vor%

Eigentlich sollte es sein:

%Vor%

Weil Sie diesen ersten Punkt mit [point(0, i) for i in range(-1, -5, -1)] erstellen (beachten Sie, dass der Parameter x 0 ist).

Dies ist eine Konsequenz von (self.test1[0], self.test2[0], self.test1[0] + self.test2[0])) wird ausgewertet - die Addition ändert den ersten Punkt in diesem Tupel (sie sind das gleiche Objekt). Dies ist auch der Grund, warum Ihr zweites Beispiel korrekt funktioniert (oder so aussieht) - Sie drucken das modifizierte Objekt nur einmal.

Die Implementierung von __add__ , die Sie bereitstellen, eignet sich für __iadd__ , um den Operator += zu implementieren. Eine korrekte Implementierung sollte ein vollständig neues Objekt point erstellen:

%Vor%     
Marcin 23.05.2012 15:41
quelle

Tags und Links