当前位置 博文首页 > _lt__、__gt__之间的关联关系分析_老猿Python:Python的富比较方

    _lt__、__gt__之间的关联关系分析_老猿Python:Python的富比较方

    作者:[db:作者] 时间:2021-07-27 08:47

    Python的富比较方法包括__lt__、__gt__分别表示:小于、大于,对应的操作运算符为:“<”、“>”。那么是否象普通数字运算一样,这两个方法之间存在互反的关系呢?
    Python没有对__lt__、__gt__这两个方法之间有什么强制关系,但建议__lt__和__gt__为互反,开发者完全可以根据业务逻辑的需要自己定义。我们来进行分析验证:

    1. 当自定义类中两个方法都定义了时,“<”、“>”分别调用__lt__和__gt__方法;
    2. 当自定义类中定义了__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
    >>>
    
    1. 当自定义类中定义了__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__的关系还是有较大的不同。

    老猿Python,跟老猿学Python!
    博客地址:https://blog.csdn.net/LaoYuanPython
    请大家多多支持,点赞、评论和加关注!谢谢!

    cs