在python中覆盖+运算符,用于float + obj

时间:2011-10-14 01:04:54

标签: python

我有一个班级Vec3D(见http://pastebin.com/9Y7YbCZq

目前,我允许Vec3D(1,0,0)+ 1.2,但我想知道如何以这样的方式重载+运算符,以便得到以下输出:

>>> 3.3 + Vec3D(1,0,0)
[4.3, 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__就会被调用。