我想知道为什么 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/
我在 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/