为什么int引发TypeError而不是NotImplemented?

时间:2013-12-16 17:53:17

标签: python operator-overloading

我想编写一个模拟数字数据类型的类。我的新类型提供了__add____radd__方法。像a+b这样添加此类型的对象可以正常工作,a+1也可以。

我的问题是,当我尝试使用1+a时,调用int的add函数会引发TypeError,这样解释器就会停止,并且不会尝试调用__radd__哪个会起作用。

python doc表示“如果其中一个方法[ie __add____radd__]不支持使用提供的参数进行操作,则应返回NotImplemented”。为什么int没有提出NotImplemented?有没有办法解决这个问题而不使我的类成为int的子类?

1 个答案:

答案 0 :(得分:1)

您对数字模型的理解是正确的:

>>> class Foob(object):
...     def __add__(self, o): return 1
...     def __radd__(self, o): return 2
... 
>>> f = Foob()
>>> f + f
1
>>> f + 5
1
>>> 5 + f
2

您的__radd__代码最终必须提出TypeError - 可能是通过调用int的{​​{1}}类型不正确。堆栈跟踪是什么样的?