Python __lt__ 富比较学习

富比较方法是什么

python中比较同对象的不同实例时,可以通过__lt__、__le__、__eq__等方法实现复杂比较,不再是cmp函数那样仅仅返回0、1、-1,这些方法就是所谓的python富比较方法

实例说明

首先新建一个GTA_car的类,属性包括车辆名称name、车辆极速top_speed和车辆加速情况accelerate

class GTA_car():
    def __init__(self, name, top_speed, accelerate):
        self.name = name
        self.top_speed = top_speed
        self.accelerate = accelerate

紧接着新建5个实例以及实例列表:

car01 = GTA_car('Obey9F', '0.83', '0.82')
car02 = GTA_car('Karin Futo', '0.72', '0.72')
car03 = GTA_car('Buffal S', '0.77', '0.72')
car04 = GTA_car('Annis Elegy RH8', '0.81', '0.82')
car05 = GTA_car('Albany', '0.83', '0.85')
car_list = [car01, car02]
print_cars(car_list)
car_list.sort()
print_cars(car_list)

此时尝试执行car_list.sort()发现报错,原因是两个实例之间不支持<

TypeError: '<' not supported between instances of 'GTA_car' and 'GTA_car'

此时尝试复写__eq__、__ne__、__gt__、__ge__、__lt__、__le__,同时通过print语句输出执行情况:

class GTA_car():
    def __init__(self, name, top_speed, accelerate):
        self.name = name
        self.top_speed = top_speed
        self.accelerate = accelerate

    def __eq__(self, other):
        print('__eq__ function is proceeded!')

    def __ne__(self, other):
        print('__nq__ function is proceeded!')

    def __gt__(self, other):
        print('__gt__ function is proceeded!')

    def __ge__(self, other):
        print('__ge__ function is proceeded!')

    def __lt__(self, other):
        print('__lt__ function is proceeded!')

    def __le__(self, other):
        print('__le__ function is proceeded!')

再次运行结果如下(默认执行__lt__方法):

__lt__ function is proceeded!
Car_name: Obey9F               Top_speed: 0.83       Accelerate: 0.82
Car_name: Karin Futo           Top_speed: 0.72       Accelerate: 0.72

__lt__注释后的运行结果如下(默认执行__gt__方法):

__gt__ function is proceeded!
Car_name: Obey9F               Top_speed: 0.83       Accelerate: 0.82
Car_name: Karin Futo           Top_speed: 0.72       Accelerate: 0.72

继续将__gt__注释,运行结果如下(报错):

TypeError: '<' not supported between instances of 'GTA_car' and 'GTA_car'
总结

class实例的sort()函数默认执行__lt__方法,通过对该方法的复写可以实现类中实例的复杂比较。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值