我想写一个模拟数字数据类型的类 . 我的新类型提供了 __add__
和 __radd__
方法 . 添加这种类型的对象,如 a+b
工作正常,也 a+1
工作 .
我的问题是,当我尝试使用 1+a
时,调用 int
的add函数会引发TypeError,这样解释器就会停止,并且不会尝试调用我的 __radd__
哪个会起作用 .
python doc表示“如果其中一个方法[即 __add__
和 __radd__
]不支持使用提供的参数进行操作,则应返回NotImplemented” . 为什么 int
没有提高NotImplemented?有没有办法解决这个问题,而不是让我的类成为int的子类?
1 回答
您对数字模型的理解是正确的:
您的
__radd__
代码最终必须引发TypeError
- 可能是通过调用int
的+
,类型不正确 . 堆栈跟踪是什么样的?