Mit V3 von Python erwarten, ich erstellen:Python: rtruediv nicht funktioniert, wie ich
class NewInt(int):
def __rtruediv__(self, num):
print('in here')
x = NewInt(5)
343/x # called rtruediv as I expect, but
343.3/x # does not call rtruediv
nicht sicher, warum dies ist, weil:
x/343
x/343.3 #both will call truediv
Für mich ist diese inkonsistent scheint ..
Jeder hat eine Erklärung, warum das ist .. und wenn Python 343.3/x gibt es eine Methode, die überschrieben werden kann?
Ich fand dieses Verhalten bei der Überprüfung einiger Informationen über das Überladen und stieß auf diese Inkonsistenz.
Dave
ahh .. sowohl dieses als auch die eine große Antworten unten sind. Ich hatte keine Ahnung von den tatsächlichen Details, wie Python Objekte auf der rechten Seite eines Operators behandelt. Es ist nicht ganz so, wie ich es erwartet habe, und ich kann jetzt sehen, dass es so sein muss. Es gibt also tatsächlich keine Möglichkeit, die Operation von: 343.3/x mit einer neuen Methode in NewInt zu übersteuern, weil sie die truediv-Methode des float-Objekts verwendet. Das Überfahren von Bedienern wird komplexer, als man zunächst annehmen könnte. Einige Texte scheinen dieses "Detail" auszulassen – Dave
Das ist nicht ganz richtig.Es ist möglich, wenn 'NewInt' geändert wird, um' int' nicht zu erben (oder irgendeine andere Klasse, für die das Floaten weiß, wie man teilt). In diesem Fall wird der Versuch auf der linken Seite fehlschlagen, aber die rechte Seite erhält jetzt einen Schuss. Wenn Sie dann "__truediv__" korrekt implementiert haben, wird das Ergebnis der Divisionsmethode des rechten Operanden ohne Fehler zurückgegeben. – wim