方法运算符重载

时间:2014-02-15 05:48:35

标签: python overloading operator-keyword

Python如何选择使用方法重载的对象?

例如:

class a:
    def __init__(self, other):
        self.data = other
    def __add__(self, other):
        return self.data + other
    def __radd__(self,other):
        return self.data + other
X = a(1) 
X+1
1+X

为什么在X + 1表达式中,在左侧的对象中调用方法__add__,在表达式1 + X中调用方法__add__在右侧的对象中调用?

1 个答案:

答案 0 :(得分:3)

X+1

首先,来电:

X.__add__(1)

成功,所以不需要进一步的工作。


另一方面,这个:

1+X

呼叫

(1).__add__(X)

失败是因为int不知道如何与班级a建立联系。 “作为最后的手段”,这是尝试的:

X.__radd__(1)

来自docs on __radd__

  

仅当左操作数不支持相应操作且操作数类型不同时才调用这些函数。