0

鉴于:

  1. 一组类实例 (CL) 和一个引用实例 (r)
  2. 该类有几个getter,例如'getA','getB',...

Todo:通过比较'getA','getB',从CL中找到匹配'r'的那些实例......对于好的代码,应该只编写一个选择函数,并且通过提供不同的getter作为比较和选择标准来调用.

我的代码如下所示:

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

但我不确定这是整洁的还是 pythonic 的。你怎么看它,你会如何编码?

谢谢!

4

1 回答 1

2

我认为你selector的很好;这里有两个建议可以让它稍微快一点,更pythonic。

  1. 不要getattr(r, cmp_function_name)()CL. 计算一次并保存:

    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 中,如果您的 getter 不带参数,请使用 属性而不是 getter:

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

    代替

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

    obj.A然后,您可以使用而不是 访问该属性obj.getA()

于 2012-10-16T12:35:55.057 回答