2012-10-16 68 views
0

鑑於:由成員函數比較和選擇的類 - 一種巧妙的方法

  1. 一組類實例(CL)和參考實例(R)
  2. 的類具有多個吸氣劑,如'木屐', 'getB',...

TODO:查找CL那場比賽 'R' 的情況下,通過比較 '木屐', 'getB',......爲了獲得良好的代碼,只有一個選擇功能應該被寫入,並且你由giv調用作爲比較和選擇標準的不同吸氣劑。

我的代碼如下所示:

def selector(r, cl, cmp_function_name): 
    return [i for i in CL if getattr(r, cmp_function_name)() == getattr(i, cmp_function_name)()] 
# call it like this: 
selector(r, cl, 'getA') 
selector(r, cl, 'getB') 
... 

但我不知道這是純的或Python的。你怎麼看待它,你會如何編碼?

謝謝!

回答

2

我認爲你的selector沒問題;這裏有兩個建議,讓它稍微更快,更pythonic。

  1. 不要在 CL重新計算getattr(r, cmp_function_name)()爲每個項目。計算一次並保存:

    def selector(r, CL, cmp_function_name): 
        refval = getattr(r, cmp_function_name) 
        return [i for i in CL if getattr(i, cmp_function_name) == refval] 
    
  2. 此外,在Python中,如果你的干將沒有參數,使用 properties代替干將:

    class CLClass(object): 
        @property 
        def A(self): 
    

    instead of

    class CLClass(ojbect): 
        def getA(self): 
    

    然後您可以使用obj.A而非 obj.getA()訪問該酒店。