zoukankan      html  css  js  c++  java
  • Python的富比较方法

    Python的富比较方法

    """
    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)
    
    cc = car1 == car2
    print(cc)
    cc1 = car1 != car2
    print(cc1)
    cc2 = car2 == car4
    print(cc2)
    
    
    """
    输出结果:
    execute __eq__
    False
    execute __ne__
    True
    execute __eq__
    True
    
    """
    
    
    """
    2、如果开发者Pyhon在自定义类中实现了__eq__方法,未实现__ne__方法,则“==”和“!=”都是__eq__方法,
    调用的两个对象比较都调用__eq__方法进行比较,不过后者是对__eq__取反。代码如下:
    
    """
    
    print("---------------------------")
    
    
    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)
    
    cc = car1 == car2
    print(cc)
    cc1 = car1 != car4  # 不过后者是对__eq__取反,实现的效果和__ne__是一样的(ne:就是 not equal 的缩写)
    print(cc1)
    
    
    """
    
    3、如果开发者Pyhon在自定义类中实现了__ne__方法,未实现__eq__方法,则“!=”调用__ne__方法,而eq则调用系统内置的“==”对应的方法,
    老猿初步分析应该是调用“is”,还没求证。代码如下:
    
    """
    
    print("************************")
    
    
    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)
    
    cc = car1 == car3  # 判断相等,会去调用系统内置的"=="对应的方法,不是判等,是判断 id 是否一致的  is  机制
    print(cc)
    cc1 = car1 != car3  # 相等成立,不等取反为False
    print(cc1)
  • 相关阅读:
    TCP/IP详解学习笔记
    python 中颜色的表示
    token工作原理
    sql注入相关链接记一次SQL注入实战
    python读写不同编码txt文件
    selenium+python 优化测试报告
    一个非常好的Linux学习网站
    jmeter 正则表达式 练习
    jmeter 实战项目总结2——微信端
    jmeter 实战项目总结1
  • 原文地址:https://www.cnblogs.com/huaibin/p/12107594.html
Copyright © 2011-2022 走看看