我想知道为什么 Magic Function 会为特定的运算符给出特定的答案

I Want to Know Why Magic Function Is Giving Specific Answer For Specific Operator

我在 Python 中使用魔术函数(运算符重载)当我知道对于特定的运算符 Python 给出了特定的答案

class over:
    def __init__(self,x):
        self.x=x
    def __add__(self,other):
        return over(self.x+other.x)
ob1=over(20)
ob2=over(30)
ob3=over(40)
ob4=ob1+ob2+ob3              #It Is adding All three
print(ob4.x)           # This Gave Me answer As 90

但是当我使用另一个魔术函数如 Greater Then (gt) 时,它只是添加最后两个值,即 ob2 和 ob3

class over:
    def __init__(self,x):
        self.x=x
    def __gt__(self,other):
        return over(self.x+other.x)
ob1=over(20)
ob2=over(30)
ob3=over(40)
ob4=ob1>ob2>ob3     # This Is Just Adding Ob2 and Ob3
print(ob4.x)          #Result:70      

我想得到结果 90,就像我在第一个代码中得到的那样,使用 gt

比较运算符的链接与+

有点不同
a < b < c

等同于

a < b and b < c

所以你的表达式实际上被评估为:

(ob1 < ob2) and (ob2 < ob3)

给出

over(x=70)

由于 and 运算符的工作方式。

要使表达式起作用,您需要添加一些括号:

(ob1 > ob2) > ob3

给出:

over(x=90)

参考:https://www.geeksforgeeks.org/chaining-comparison-operators-python/