Python 使用类属性作为函数参数?

Python 使用类属性作为函数参数?,python,function,Python,Function,所以我有一个Python排序算法。(其确切内容与此问题无关)它使用一个名为“people”的列表,其中包含类实例,并且该函数通过硬编码按特定属性“wealth”对该列表进行排序 def my_sort(seq): # sorts by seq[n].wealth ... my_sort(people) 现在,我想推广这个函数,这样我就可以按任何属性排序了 def my_sort2(seq, key): # sorts by seq[n].key ... my_s

所以我有一个Python排序算法。(其确切内容与此问题无关)它使用一个名为“people”的列表,其中包含类实例,并且该函数通过硬编码按特定属性“wealth”对该列表进行排序

def my_sort(seq):
    # sorts by seq[n].wealth
    ...
my_sort(people)
现在,我想推广这个函数,这样我就可以按任何属性排序了

def my_sort2(seq, key):
    # sorts by seq[n].key
    ...
my_sort2(people, wealth)
当然,这会造成一个错误,因为它不知道把“财富”看作一个类属性。那么,这怎么可能呢?

您可以传递属性的名称:

def my_sort2(seq, keyname):
    sort by getattr(seq[n], keyname)

my_sort2(people, 'wealth')
或getter函子:

def my_sort2(seq, keyfunc):
    sort by keyfunc(seq[n])

my_sort2(people, operator.attrgetter('wealth'))

我更喜欢后一种方法,因为它更通用。例如,它很容易允许计算键。

通用属性getter函数
getattr
应该可以工作:

gettattr(obj, name)

出于好奇,Python中的默认排序算法有什么问题吗?我有一个习惯,当我注意到我在某些领域的技能不足时,我会以艰难的方式做事。