为什么只定义__lt__就可以>操作?


class Node:
def __init__(self,a,b):
self._a=a
self._b=b
def __lt__(self,other):
return self._a<other._a

a=Node(1,2)
b=Node(0,4)
print(a>b)

上面的代码显示True。

class Node:
def __init__(self,a,b):
self._a=a
self._b=b
def __lt__(self,other):
return self._a<other._a
def __eq__(self,other):
return self._a==other._a
a=Node(1,2)
b=Node(0,4)
print(a>=b)

上面的代码显示TypeError:'<='在"Node"one_answers"Node"的实例之间不支持。

为什么只定义lt使>(哪个是gt(操作是否可行?为什么定义lteq使<=不可能的

Python文档规定:

这些方法没有交换的参数版本(当左参数不支持操作,而右参数支持操作时使用(;相反,__lt__()__gt__()是彼此的反射,__le__()__ge__()是彼此的反映,__eq__()__ne__()是它们自己的反射。

因此,如果左侧参数不实现比较运算符,而右侧实现其反射,则会调用该反射。这也解释了为什么Python没有将__lt__()__eq__()组合成__le__()——这根本没有被考虑。

在第一个示例中,您将与使用__gt__>进行比较。在第二个示例中,您将使用>=进行比较,这是一个不同的比较,它使用__ge__

在文档中查看丰富的比较

这些就是所谓的"丰富比较"方法。信件运算符符号和方法名称之间的关系如下:x<y调用x.__lt__(y)x<=y调用x.__le__(y)x==y调用x.__eq__(y)x!=y调用x.__ne__(y)x>y调用x.__gt__(y)x>=y调用x.__ge__(y)

相关内容

  • 没有找到相关文章

最新更新