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(操作是否可行?为什么定义lt和eq使<=不可能的
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)
。