python – 有没有办法在列表项的类中覆盖list.max()和list.sort(
发布时间:2020-12-20 11:20:42 所属栏目:Python 来源:网络整理
导读:我有一个超类的多个子类,它们在instance_of_a_class.value中存储一些东西,我重写__cmp __()以提供合理的==,,比较. 但是,我在我的代码中有多个位置 min(list_of_instances_of_class,key = lambda _:_. value)或max(list_of_instances_of_class,key = lambda
我有一个超类的多个子类,它们在instance_of_a_class.value中存储一些东西,我重写__cmp __()以提供合理的==,<,>比较.
但是,我在我的代码中有多个位置 min(list_of_instances_of_class,key = lambda _:_. value)或max(list_of_instances_of_class,key = lambda _:_. value)和偶尔排序(… 是否有一个函数要在类中重写,这样我就不必为每个对所述函数的调用指定键函数,或者我是否需要子类列表并覆盖max,min和sorted方法? 解决方法
只需实现__lt__:
class Obj(object): def __init__(self,value): self.value = value def __lt__(self,other): return self.value < other.value def __repr__(self): return 'Obj(%r)' % self.value obj_list = [Obj(2),Obj(1),Obj(4),Obj(3)] print max(obj_list) print min(obj_list) print sorted(obj_list) 不推荐使用__cmp__,并且您提到的所有函数仅使用__lt__而不使用其他比较. 如果由于某种原因你真的不能用这种方式比较,你可以这样做: from operator import attrgetter from functools import partial valget = attrgetter('value') maxval = partial(max,key=valget) minval = partial(max,key=valget) sortedval = partial(sorted,key=valget) sortval = partial(list.sort,key=valget) 你把它们称为maxval(obj_list)而不是max(obj_list)等,而sortval(obj_list)就地排序而不是obj_list.sort() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |