Was soll ich beispielsweise tun, wenn ich ein konstantes Vielfaches der häufig als Beispiel angegebenen "Punktklasse" ausführen möchte? Als Beispiel
class Point():
def __init__(self,x,y):
self.x = x
self.y = y
Definieren wir jedoch die Multiplikation. Nehmen wir als Spezifikation an, dass beim Multiplizieren von Punkten ein Punkttyp zurückgegeben wird, der mit x und y multipliziert wird, und beim Multiplizieren mit einer Ganzzahl ein Punkttyp zurückgegeben wird, der mit einer Konstanten multipliziert wird.
Definieren Sie zunächst die Operation mit \ _ \ _ mul__
class Point():
...
def __mul__(self, other):
if isinstance(other,Point):
return Point(self.x*other.x,self.y*other.y)
elif isinstance(other,int):
return Point(self.x*other,self.y*other)
else:
return NotImplemented
...
Verwenden Sie \ _ \ _ rmul__, da dies allein keine Operationen von rechts unterstützt Zum Beispiel, wenn mul in einer Operation definiert ist, die das Austauschgesetz enthält.
def __rmul__(self,other):
return self*other
Aber es ist okay, wenn du schreibst Wenn Sie andere * = usw. verwenden möchten, können Sie \ _ \ _ imul__ aufrufen.
Recommended Posts