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

时间:2011-10-19 13:44:00

标签: python function

所以我在Python中有一个工作排序算法。 (它的确切内容与这个问题无关。)它使用一个名为'people'的列表,其中包含类实例,该函数是硬编码的,用于按特定属性“财富”对该列表进行排序。

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)

但是,这当然会引发错误,因为它不知道将“财富”视为一个类属性。那么,这怎么可能呢?

2 个答案:

答案 0 :(得分:10)

您可以传递属性的名称

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'))

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

答案 1 :(得分:1)

通用属性getter函数getattr应该有效:

gettattr(obj, name)