首页
学习
活动
专区
工具
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

    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

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

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

    89810

    反运算(简单的定制)

    (反运算相关的魔法方法) 与之前的笔记对比,不难发现反运算只是多了一个‘r’ 看例子 class Nint(int): def __radd__(self,other): return...8 关于反运算,这里要注意一点;对于a + b,b的__radd__(self,other),中other是a的对象,self才是b的对象 增量赋值运算符 (来源于网络) Python里有大量的魔术方法可以定制增量赋值语句...t1均显示结果当计时器未启动或已经停止计时,调用stop方法会给温馨提示两个计时器对象可以相加只能使用有限的资源完成 演示代码 >>>t1 = MYtime()>>>t1未开始计时>>>t1.stop(...1, in t1.start()TypeError: 'int' object is not callable>>> 怎么又报错了,书上是故意的,但是我是很不愿意报错,因为浪费时间...self.unit[index])) #为下一轮计数初始化变量 self.begin = 0 self.end = 0 #计算两个时间累计和 def __add

    47720
    领券