2012-10-16 106 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()访问该酒店。