首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

`__add__`引发`NotImplementedError`会调用`__radd__`吗?

在Python中,__add__是一个特殊方法,用于定义对象之间的加法操作。当两个对象进行加法运算时,如果其中一个对象的类定义了__add__方法,那么该方法将被调用。

当使用+运算符进行加法操作时,如果左操作数的类定义了__add__方法,则会调用该方法。如果左操作数的类没有定义__add__方法,但右操作数的类定义了__radd__方法,则会调用右操作数的__radd__方法。

如果__add__引发NotImplementedError,则会返回特殊值NotImplemented,这告诉Python解释器无法处理该加法操作。在这种情况下,Python会尝试调用右操作数的__radd__方法,以便右操作数的类有机会处理加法操作。

综上所述,当__add__引发NotImplementedError时,会尝试调用右操作数的__radd__方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

一日一技:在Python中实现阿拉伯数字加上中文数字

这是由于,当我们执行 a+b的时候,Python会调用 a对象里面的 __add__方法,所以当我们执行 一+1的时候,调用的是 一里面的 __add__方法,这是我们自己写的,所以能够正常运行。...但是当我们执行 1+一的时候,调用的是 1里面的 __add__方法。在Python里面,数字对象里面的 __add__方法只能实现数字加数字。...但是我们不能修改Python 内置数字的 __add__方法,所以我们需要使用 __radd__方法。...它的作用是,在 1+一执行的时候,如果 1里面的 __add__运行失败了,那么就会调用 一里面的 __radd__: class Num(object): def __init__(self,...__(self, x): return self.n + x def __radd__(self, x): return self.n + x 运行效果如下图所示

1.3K10
  • 如何在 Python 中用中文做数学运算?

    这是由于,当我们执行 a+b的时候,Python会调用 a对象里面的 __add__方法,所以当我们执行 一+1的时候,调用的是 一里面的 __add__方法,这是我们自己写的,所以能够正常运行。...但是当我们执行 1+一的时候,调用的是 1里面的 __add__方法。在Python里面,数字对象里面的 __add__方法只能实现数字加数字。...但是我们不能修改Python 内置数字的 __add__方法,所以我们需要使用 __radd__方法。...它的作用是,在 1+一执行的时候,如果 1里面的 __add__运行失败了,那么就会调用 一里面的 __radd__: class Num(object): def __init__(self,...__(self, x): return self.n + x def __radd__(self, x): return self.n + x 运行效果如下图所示

    60540

    Python内置(2)异常、常量、globals

    该函数中可能发生 3 件事: • 如果key不在缓存中,则尝试访问cached_items[key]将引发一个KeyError .这会在try块中捕获,并进行 API 调用以获取数据。...如果键是None ,则fetch_from_cache引发 一个ValueError ,指示提供给此函数的值不合适。由于该try块只捕获 KeyError,因此此错误直接显示给用户。...Python中的对象可以通过实现__add__实现对+运算符的支持。__iadd__对+=提供支持。等等。...上面实现的__add__ 只有对象在运算符左侧才有效。 __radd__是右运算符,添加后就可以计算3+num。...你可能惊讶,Python也要编译?是的。Python被编译。事实上,所有的Python代码都是被编译的,但不是机器代码 ,而是字节码(bytecode)。

    93420

    Python 3 之 运算符重载详解

    事实上,很多重载方法有好几个版本(例如,加法就有__add__、__radd__和__iadd__)。...运算符重载方法也都是可选的……如果没有编写或继承一个方法,你的类直接不支持这些运算,并且试图使用它们引发一个异常。...对于类不知道该如何处理的属性,这个__getattr__引发内置的 AttributeError异常,高数Python,那真的是未定义的属性。请求X.name时,引发错误。...当我们把两个实例相加的时候,Python运行__add__,它反过来通过简化左边的运算数来触发__radd__。...这些方法通常很容易使用,但是,记住如下的一些限制: 与前面讨论的__add__/__radd__对不同,比较方法没有右端形式。

    4.1K10

    Python运算符重载

    运算符重载 在Python语言中提供了类似于C++的运算符重在功能: 一下为Python运算符重在调用的方法如下: Method        Overloads        Call for...__init__        构造函数        X=Class() __del__        析构函数        对象销毁 __add__        +               ...repr__        打印转换        print X,repr(X) __str__        打印转换        print X,str(X) __call__        调用函数...        比较            X==Y,X<Y __lt__        小于            X<Y __eq__        等于            X=Y __radd...addrepr(%s)' % self.data x = addrepr(2) #run __init__x + 1 #run __add__print x #run __repr__ 7.6    Call调用函数重载

    63410

    Python学习笔记整理(十五)类的编写

    就像模块文件,位于class语句主体中的语句建立起属性。当python执行class语句时(不是调用类) 从头到尾执行其主体内的所有语句。...也就是说,在构造时,Python找出并且只调用 一个__init__。如果要保证子类的构造方法也执行超类构造器的逻辑,一般都必须通过类明确地调用超类的__init__方法。...I=Sub(1,2) 疑问:子类__init__方法不会继承超类的?需要是明确手动继承?这个是重载吧? 动手验证 >>> class Super: ...    ...如果预期的方法没有在子类定义,当继承搜索失败时,Python引发为定义 变量名的异常。...类的编写者偶尔会使用assert语句,使这种子类需求更为明显,或者引发内置的异常NotImplementedError class Super:         def method(self):

    89810

    PyTorch 小课堂开课啦!带你解析数据处理全流程(一)

    · __len__(self):定义当被 len() 函数调用时的行为,一般返回迭代器中元素的个数。...一个容器或者类如果是迭代器,那么就必须实现 __iter__() 方法以及重点实现 __next__() 方法,前者返回一个迭代器(通常是迭代器对象本身),而后者决定了迭代的规则。...def __getitem__(self, index) -> T_co: raise NotImplementedError def __add__(self, other:...· torch.utils.data.ChainDataset:用于连接多个 IterableDataset 数据集,在 IterableDataset 的 __add__() 方法中被调用。...今天的分享就到此为止啦,关于 prefetch,pin_memory 等组件的介绍,我们会在后续系列文章中和大家分享,并对其特定功能予以解读,相关的数据处理代码详解也一并附上。

    1K10
    领券