我目前正试图了解在使用a+b
和a.__add__(b)
之间的区别是什么时候涉及到自定义类。有很多网站表示使用'+' - 运算符会导致使用特殊方法__add__
- 目前为止这很好。a + b和.__之间的区别__(b)
但是,当我运行下面的例子,我得到了两个不同的结果。
class C:
def __add__(self, other):
print("C.__add__", self, other)
return "result"
def __radd__(self, other):
print("C.__radd__", self, other)
return "reversed result"
c = C()
print(1+c)
print()
print(1 .__add__(c))
print(int.__add__(1,c))
结果:
C.__radd__ <C object at 0x7f60b92e9550> 1
reversed result
NotImplemented
NotImplemented
从我的理解,执行
1+c
Python的检查时/执行INT
__add__
方法
现在 - 发现有添加int和C对象没有实现 - 回报NotImplemented - 让Python知道检查对象C的__radd__
并执行其中的代码。
为什么1+c
结果在执行__radd__
代码,但其他两个版本都只是返回NotImplemented
不检查__radd__
?
呃,因为你直接调用了__add__?正如你所说的,当你使用'+'运算符时,Python只会回退。 –
猜测我不知道如果直接使用'__add__',则不会使用回退。 – Korred