ich hatte letztens ein Beispiel in einer anderen Sprache gesehen, wo jemand Operatoren umdefiniert hatte, sodass (zum Beispiel, aber nicht zwingend) 5 + 5 keine Addition, sondern eine Subtraktion ausführt und damit 0 ergibt. Mal abgesehen davon, dass das natürlich nicht sehr sinnvoll und eher Spielerei ist, würde ich trotzdem gerne wissen, wie man das in Python machen würde
Da isinstance(5, int) True ergibt und mein bisheriges Verständnis so war, dass - wegen des Duck Typings ? - der Ablauf c.a. so sein müsste, dass bei Verwendung des Operators '+' die entsprechende __add__ Funktion des Objektes aufgerufen würde, dachte ich es würde reichen, die entsprechenden Methoden der Klasse 'int' zu überschreiben.
Folgendes veranlasst mich aber dazu anzunehmen, dass ich da irgendwas noch nicht richtig verstanden habe:
(Python 3.3)
Code: Alles auswählen
from operator import add, sub, mul, truediv
>>> isinstance(5, int)
True
class int(int):
def __add__(self, y):
return sub(self.numerator, y)
def __sub__(self, y):
return add(self.numerator, y)
def __mul__(self, y):
return truediv(self.numerator, y)
def __div__(self, y):
return mul(self.numerator, y)
>>> 5 + 6
11
>>> m, n = int(5), int(6)
>>> m + n
-1
>>> isinstance(5, int)
False
Werden Zahlen, die man ohne Aufruf von int() an Namen bindet also nicht "unter der Haube" doch an diese übergeben?
Und wie wäre es richtig?
Vielen Dank schon mal.