Python的富比较方法__lt__、__gt__之间的关联关系分析
Python的富比较方法包括__lt__、__gt__分别表示:小于、大于,对应的操作运算符为:“<”、“>”。那么是否象普通数字运算一样,这两个方法之间存在互反的关系呢? Python没有对__lt__、__gt__这两个方法之间有什么强制关系,但建议__lt__和__gt__为互反,开发者完全可以根据业务逻辑的需要自己定义。我们来进行分析验证:
- 当自定义类中两个方法都定义了时,“<”、“>”分别调用__lt__和__gt__方法;
- 当自定义类中定义了__lt__方法,未定义__gt__方法时,进行”>”比较也是调用__lt__方法,只是对调用值求反。案例:
>>> class Car(): def __init__(self,carname,oilcp100km, price): self.carname,self.oilcp100km,self.price = carname,oilcp100km, price def __lt__(self,other): print("execute __lt__") return self.price<other.price >>> >>> car1,car2,car3,car4 = Car(爱丽舍,8,10),Car(凯美瑞,7,27),Car(爱丽舍,8,10),Car(途观,12,27) >>> >>> car1>car2 execute __lt__ False >>> car1<car2 execute __lt__ True >>>
- 当自定义类中定义了__gt__方法,未定义__lt__方法时,进行”<”比较也是调用__gt__方法,只是对调用值求反。案例:
>>> class Car(): def __init__(self,carname,oilcp100km, price): self.carname,self.oilcp100km,self.price = carname,oilcp100km, price def __gt__(self,other): print("execute __gt__") return self.price>other.price >>> car1,car2,car3,car4 = Car(爱丽舍,8,10),Car(凯美瑞,7,27),Car(爱丽舍,8,10),Car(途观,12,27) >>> car1<car2 execute __gt__ True >>> car1>car2 execute __gt__ False >>>
通过以上案例,我们知道当__lt__、__gt__方法都定义了时,“<”、“>”分别调用__lt__和__gt__方法,当一个定义另一个未定义时,未定义的操作执行时会调用已经定义的方法求反。这个与__eq__和__ne__的关系还是有较大的不同。