首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >_add_ vs _radd_:表达式是如何计算的?

_add_ vs _radd_:表达式是如何计算的?
EN

Stack Overflow用户
提问于 2020-12-03 20:01:18
回答 2查看 57关注 0票数 0

让我们考虑使用类的下一个示例:

代码语言:javascript
复制
class A1:
    def __init__ (self):pass
    def __add__(self, other):
        if isinstance(other, A2):return 111
        if isinstance(other, A1):return 222
        return 333
    def __radd__(self, other):
        if isinstance(other, A1):return 444
        return 555

class A2(A1):
    def __init__(self) : pass
    def __radd__(self, other):
        if isinstance(other, A1):return 666
        return 777

所以,当我计算以下表达式时

代码语言:javascript
复制
a1 = A1()
a2 = A2()
print(a1 + a1, a2 + a2, a1 + a2, a2 + a1)

我得到了这个结果:

代码语言:javascript
复制
222 111 666 222

我明白我是如何得到222,111,222的,但是a1 + a2怎么可能评估到666年呢?a1没有添加方法吗?其他是A2的一个实例,它将导致111个而不是666个?

我使用的Python版本是3.8.2

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-03 20:12:39

x + y中,如果yx类子类的一个实例,则在x.__add__之前尝试y.__radd__。在这里可以看到这一点。

票数 2
EN

Stack Overflow用户

发布于 2020-12-03 20:06:00

我相信,在这种情况下,A2也有A1的实例,它最终返回666。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65133246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档