2011-10-19 33 views
2

所以我有一個工作在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) 

但是,這當然會引發錯誤,因爲它不知道將「財富」視爲類屬性。那麼,這怎麼可能呢?

+0

出於好奇,有什麼不對的默認Python中的排序算法? – katrielalex

+0

當我注意到我在某些領域的技能不足時,我有一種艱難的做事方式。 – xcel

回答

10

你可以通過名稱的屬性

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

my_sort2(people, 'wealth') 

或吸氣函子:

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

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

我更喜歡後者的做法,因爲它是更通用。例如,它很容易允許計算密鑰。

+0

一個有用的帖子,謝謝。 – xcel

1

通用屬性getter函數getattr應該工作:

gettattr(obj, name)