zoukankan      html  css  js  c++  java
  • Python的富比较方法__eq__和__ne__之间的关联关系分析

    Python的富比较方法包括__lt__、__gt__、__le__、__ge__、__eq__和__ne__六个方法,分别表示:小于、大于、小于等于、大于等于、等于和不等于,对应的操作运算符为:<、>、<=、>=、==和!=。那么是否象普通数字运算一样,这些符号之间存在关联关系呢?如“小于等于”是否就包含了“小于”?比较符号之间有必须的包含关系吗?本次对富比较方法__eq__和__ne__之间的关系进行分析:
    Python建议__eq__和__ne__之间是非的关系,__ne__的方法实现时就应该调用__eq__取反来完成,但如果开发者不遵循该要求实际上也是可以的。
    案例分析:
    1、如果开发者Pyhon在自定义类中实现了__eq__和__ne__这两个方法,则“==”和“!=”的两个对象比较分别调用了这两个方法进行比较。代码如下:

    >>> class Car():
       def __init__(self,carname,oilcp100km, price):
           self.carname,self.oilcp100km,self.price = carname,oilcp100km, price
    
       def __eq__(self,other):
           print("execute __eq__")
           return self.price==other.price
       def __ne__(self,other):
           print("execute __ne__")
           return self.price!=other.price
    
    >>> car1,car2,car3,car4 = Car('爱丽舍',8,10),Car('凯美瑞',7,27),Car('爱丽舍',8,10),Car('途观',12,27)
    >>> car1==car2
    execute __eq__
    False
    >>> car1!=car2
    execute __ne__
    True
    >>> car2==car4
    execute __eq__
    True
    >>>
    

    2、如果开发者Pyhon在自定义类中实现了__eq__方法,未实现__ne__方法,则“==”和“!=”都是__eq__方法,调用的两个对象比较都调用__eq__方法进行比较,不过后者是对__eq__取反。代码如下:

    >>> class Car():
       def __init__(self,carname,oilcp100km, price):
           self.carname,self.oilcp100km,self.price = carname,oilcp100km, price
    
       def __eq__(self,other):
           print("execute __eq__")
           return self.price==other.price
    
    >>> car1,car2,car3,car4 = Car('爱丽舍',8,10),Car('凯美瑞',7,27),Car('爱丽舍',8,10),Car('途观',12,27)
    >>> car1==car2
    execute __eq__
    False
    >>> car1!=car2
    execute __eq__
    True
    >>>
    

    3、如果开发者Pyhon在自定义类中实现了__ne__方法,未实现__eq__方法,则“!=”调用__ne__方法,而eq则调用系统内置的“==”对应的方法,老猿初步分析应该是调用“is”,还没求证。代码如下:

    >>> class Car():
       def __init__(self,carname,oilcp100km, price):
           self.carname,self.oilcp100km,self.price = carname,oilcp100km, price
       
       def __ne__(self,other):
           print("execute __ne__")
           return self.price!=other.price
    
    >>> car1,car2,car3,car4 = Car('爱丽舍',8,10),Car('凯美瑞',7,27),Car('爱丽舍',8,10),Car('途观',12,27)
    >>> car1!=car3
    execute __ne__
    False
    >>> car1==car3
    False
    >>> car1==car1
    True
    >>>
    

    从上面3个分析过程可以知道,Python内部要求__eq__和__ne__是互反的关系,且在自定义类中未定义__ne__方法时,调用__eq__求反实现__ne__的判断,这是由于object类中__ne__方法就是这样实现的。

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

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

  • 相关阅读:
    搭建vue环境
    git常用命令整理
    highcharts 当Y轴全部没有数据的时候 数据标签显示最下面 而不是居中显示
    highcharts 不显示X轴 Y轴 刻度
    关于placeholder中 文字添加换行 用转义字符&#13;&#10;代替<br>
    highcharts 柱状图 折线图 混合 双纵轴显示
    单行、多行文字溢出 显示省略号
    Highcharts 饼图 文字颜色设置
    多行文本,垂直居中显示,文字超出高度显示省略号
    学习方法-5:比较学习法
  • 原文地址:https://www.cnblogs.com/LaoYuanPython/p/11166830.html
Copyright © 2011-2022 走看看