所以我在Python中有一个工作排序算法.(它的确切内容与这个问题无关.)它使用一个名为"people"的列表,其中包含类实例,该函数是硬编码的,用于按特定属性"财富"对该列表进行排序.
def my_sort(seq):
# sorts by seq[n].wealth
...
my_sort(people)
Run Code Online (Sandbox Code Playgroud)
现在,我想概括一下这个函数,以便按任何属性排序.
def my_sort2(seq, key):
# sorts by seq[n].key
...
my_sort2(people, wealth)
Run Code Online (Sandbox Code Playgroud)
但是,这当然会引发错误,因为它不知道将"财富"视为一个类属性.那么,这怎么可能呢?
NPE*_*NPE 10
您可以传递属性的名称:
def my_sort2(seq, keyname):
sort by getattr(seq[n], keyname)
my_sort2(people, 'wealth')
Run Code Online (Sandbox Code Playgroud)
或者一个getter仿函数:
def my_sort2(seq, keyfunc):
sort by keyfunc(seq[n])
my_sort2(people, operator.attrgetter('wealth'))
Run Code Online (Sandbox Code Playgroud)
我更喜欢后一种方法,因为它更通用.例如,它很容易允许计算密钥.