python - 如何使python类能够加法或乘法,前面有数字?
问题描述
我知道有一种方法可以使类与这些数学运算符兼容,后面有数字:
class Sth:
def __init__(self):
self.val = 1
def __add__(self, digit):
self.val += digit
return self
那么像这样的代码sth = Sth() * 2.8
是合法的。
但是如何使代码sth = 2.8 * Sth()
合法呢?
(我这样做是因为在我使用的第三方函数中有很多数字提前操作。我想将我自己的实例传递给他们。)
解决方案
您可以调用r
双下方法的版本来反转操作数
class Sth:
def __init__(self):
self.val = 1
def __add__(self, digit):
self.val += digit
return self
def __radd__(self, digit):
return self.__add__(digit)
这将支持
sth = Sth() + 2.8 # __add__
sth = 2.8 + Sth() # __radd__
你可以做同样的事情__mul__
,__rmul__
但要注意你的类是否应该允许这些运算符是可交换的,否则请确保每个实现在这些情况下都做正确的事情。