我有一个班级Vec3D(见http://pastebin.com/9Y7YbCZq)
目前,我允许Vec3D(1,0,0)+ 1.2,但我想知道如何以这样的方式重载+运算符,以便得到以下输出:
>>> 3.3 + Vec3D(1,0,0)
[4.3, 3.3 , 3.3]
代码不是必需的,但只是提示我应该看哪个方向。通用的东西比特定的实现更有用,因为我需要为乘法,减法等实现相同的东西。
答案 0 :(得分:11)
您正在寻找__radd__
:
class MyClass(object):
def __init__(self, value):
self.value = value
def __radd__(self, other):
print other, "radd", self.value
return self.value + other
my = MyClass(1)
print 1 + my
# 1 radd 1
# 2
如果添加左侧的对象不支持在右侧添加对象,则会检查右侧的对象是否为__radd__
魔法。
答案 1 :(得分:3)
您想使用__add__
(可能还有__radd__
和__iadd__
)方法。查看http://docs.python.org/reference/datamodel.html#object.__add__了解详情。
答案 2 :(得分:3)
实施__radd__
。当您致电3.3 + Vec3D(1,0,0)
时,只要float没有y为Vec3D的方法__add__(y)
,您的反映版本__radd__
就会被调用。