【发布时间】:2009-08-06 15:39:06
【问题描述】:
为了简单起见,假设我在 Python 中有一个 Person 类。此类具有名字、姓氏和出生日期的字段。
class Person:
def __init__(self, firstname, lastname, dob):
self.firstname = firstname;
self.lastname = lastname;
self.dob = dob;
在某些情况下,我想按姓氏、名字和出生日期对人员列表进行排序。在其他情况下,我想先按 dob 排序,然后按姓氏排序,最后按名字排序。有时我只想按名字排序。
创建第一个比较函数的简单解决方案是这样的:
def comparepeople(person1, person2):
if cmp(person1.lastname, person2.lastname) == 0:
if cmp(person1.firstname, person2.firstname) == 0:
return cmp(person1.dob, person2.dob);
return cmp(person1.firstname, person2.firstname);
return cmp(person1.lastname, person2.lastname);
似乎应该有一种简单的方法来使用元编程方法来定义这样的比较函数,我需要做的就是按优先顺序提供字段名称,而不是编写这些非常冗长、丑陋的比较方法。但是我最近才开始玩 Python,还没有找到像我描述的那样的东西。
所以问题是,为具有多个可比较组成成员的类编写比较函数的最 Pythonic 方式是什么?
【问题讨论】:
-
顺便说一句——删除那些分号!它们没有任何用处,也不是好的 Python 风格。
标签: comparison metaprogramming python