我想编写一个模拟数字数据类型的类。我的新类型提供了__add__
和__radd__
方法。像a+b
这样添加此类型的对象可以正常工作,a+1
也可以。
我的问题是,当我尝试使用1+a
时,调用int
的add函数会引发TypeError,这样解释器就会停止,并且不会尝试调用__radd__
哪个会起作用。
python doc表示“如果其中一个方法[ie __add__
和__radd__
]不支持使用提供的参数进行操作,则应返回NotImplemented”。为什么int
没有提出NotImplemented?有没有办法解决这个问题而不使我的类成为int的子类?
答案 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}}类型不正确。堆栈跟踪是什么样的?