首页 文章

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

提问于
浏览
0

我想写一个模拟数字数据类型的类 . 我的新类型提供了 __add____radd__ 方法 . 添加这种类型的对象,如 a+b 工作正常,也 a+1 工作 .

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

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

1 回答

  • 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+ ,类型不正确 . 堆栈跟踪是什么样的?

相关问题