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)
原文地址:https://www.cnblogs.com/huaibin/p/12107594.html