实例对象的连接,应该排序吗?

时间:2014-06-05 17:53:38

标签: python-2.7

在创建一个简单的类并实例化它之后,我发现了这种好奇心,

class A():
    def __init__(self,inp):
            self.id = inp
    def get_id(self):
            return self.id
    def __add__(self,other):
            return other + self.id

实例化,

me = A('Matt')

现在,当我尝试使用重载方法__add__时,它按预期工作,

me + ' test concatenation'   

但是当我以相反的方式进行时,'test concatenation ' + me,我得到了

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'instance' objects

为什么参数的顺序很重要?

1 个答案:

答案 0 :(得分:0)

因为'+'符号首先隐式调用.__ add __(second)。

在幕后,当你有一个像“hello”+“world”这样的表达式时,你实际上是在执行它:string .__ add __(string)。因此,__ add__方法是第一个参数的方法,这就是订单重要的原因。