富比较方法是什么
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__
方法,通过对该方法的复写可以实现类中实例的复杂比较。