运算符表达式与直接调用新型python类中的内置方法
我有一个类试图对其对象调用add函数。 考虑下面的代码:运算符表达式与直接调用新型python类中的内置方法,python,python-3.x,Python,Python 3.x,我有一个类试图对其对象调用add函数。 考虑下面的代码: class Test(object): data = "hello" def __getattr__(self, name): print('getattr: ' + name) return getattr(self.data, name) >>> obj = Test() >>> obj + 'world' TypeError: unsupporte
class Test(object):
data = "hello"
def __getattr__(self, name):
print('getattr: ' + name)
return getattr(self.data, name)
>>> obj = Test()
>>> obj + 'world'
TypeError: unsupported operand type(s) for +: 'Test' and 'str'
>>> type(obj).__add__(obj, 'world')
AttributeError: type object 'Test' has no attribute '__add__'
在新式课堂上
(obj + "world")
相当于
type(obj).__add__(obj,"world")
那么,为什么在这两种情况下我会得到不同的错误呢?
我期待着同样的错误,因为这两个语句对我来说都是一样的。我几周前开始使用python。因此,我无法找到我在这里缺少的概念。运算符
+
与类型(obj)不完全等效。\uuuuuuu add\uuu
<代码>+还调用类型(其他)。\uuuu radd\uuuu
如果未定义其他方法,并且在两个方法都不存在时抛出更多描述性错误。如果要将+
作为一个函数进行精确模拟,请使用操作符。添加该+
操作符并不完全等同于类型(obj)。\uuuuuuuuuuuuu添加
<代码>+
还调用类型(其他)。\uuuu radd\uuuu
如果未定义其他方法,并且在两个方法都不存在时抛出更多描述性错误。如果要将+
作为函数进行精确模拟,请使用运算符。add
第一个错误来自操作数+
,第二个错误来自对象测试
是的,第一个错误来自“+”,但该“+”在内部调用add方法,如:type(obj)。\uu add_j(obj,“world”)。那么这两者有什么不同呢?顺便说一句,感谢您的响应:)第一个错误来自操作数+
,第二个错误来自对象测试是的,第一个错误来自“+”,但这个“+”在内部调用add方法,如下所示:type(obj)。\uuuuuuuuadd(obj,“world”)。那么这两者有什么不同呢?顺便说一句,感谢您的回复:)谢谢,但我正在寻找这两种方法之间的确切区别。如果它是索引操作而不是添加,那么obj[index]与type(obj)会有多大的不同。\uuu getitem\uuu(obj,index)?@geek在索引的情况下,唯一的区别是额外的错误消息。对于+
,我相信这是唯一的区别。谢谢,但我正在寻找这两种方法之间的确切区别。如果它是索引操作而不是添加,那么obj[index]与type(obj)会有多大的不同。\uuu getitem\uuu(obj,index)?@geek在索引的情况下,唯一的区别是额外的错误消息。对于+
,我认为这是唯一的区别。