zoukankan      html  css  js  c++  java
  • Python的富比较方法__le__、__ge__之间的关联关系分析

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

    1. 当自定义类中两个方法都定义了时,“<=”、“>=”分别调用__le__和__ge__方法;
    2. 当自定义类中定义了__le__方法,未定义__ge__方法时,进行”>=”比较也是调用__le__方法,只是对调用值求反。案例:
    >>> class Car():
       def __init__(self,carname,oilcp100km, price):
           self.carname,self.oilcp100km,self.price = carname,oilcp100km, price
       
       def __le__(self,other):
           print("execute __le__")
           return self.price<=other.price
     >>> 
    >>> car1,car2,car3,car4 = Car('爱丽舍',8,10),Car('凯美瑞',7,27),Car('爱丽舍',8,10),Car('途观',12,27)
    >>> 
    >>> car1>=car2
    execute __le__
    False
    >>> car1<=car2
    execute __le__
    True
    >>>
    
    1. 当自定义类中定义了__ge__方法,未定义__le__方法时,进行”<=”比较也是调用__ge__方法,只是对调用值求反。案例:
    >>> class Car():
       def __init__(self,carname,oilcp100km, price):
           self.carname,self.oilcp100km,self.price = carname,oilcp100km, price
       
         def __ge__(self,other):
           print("execute __ge__")
           return self.price>=other.price
    
    >>> car1,car2,car3,car4 = Car('爱丽舍',8,10),Car('凯美瑞',7,27),Car('爱丽舍',8,10),Car('途观',12,27)
    >>> car1<=car2
    execute __ge__
    True
    >>> car1>=car2
    execute __ge__
    False
    >>>
    

    通过以上案例,我们知道当__le__、__ge__方法都定义了时,“<=”、“>=”分别调用__le__和__ge__方法,当一个定义另一个未定义时,未定义的操作执行时会调用已经定义的方法求反。这个与__eq__和__ne__的关系还是有较大的不同,与__lt__和__gt__的关系一样。

    老猿Python,跟老猿学Python!
    博客地址:https://blog.csdn.net/LaoYuanPython

    请大家多多支持,点赞、评论和加关注!谢谢!

  • 相关阅读:
    《算法》第六章部分程序 part 5
    《算法》第六章部分程序 part 4
    《算法》第六章部分程序 part 3
    《算法》第六章部分程序 part 2
    《算法》第六章部分程序 part 1
    OpenGL Hello World
    《算法》第五章部分程序 part 3
    《算法》第五章部分程序 part 8
    《算法》第五章部分程序 part 7
    《算法》第五章部分程序 part 6
  • 原文地址:https://www.cnblogs.com/LaoYuanPython/p/11166828.html
Copyright © 2011-2022 走看看