鉴于:
Todo:通过比较'getA','getB',从CL中找到匹配'r'的那些实例...对于好的代码,只应编写一个选择函数,并调用通过给出不同的吸气剂作为比较和选择标准。
我的代码如下所示:
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。您如何看待它以及如何编码?
谢谢!
答案 0 :(得分:2)
我认为你的selector
很好;这里有两个建议,使它更快,更pythonic。
不要为每个项目重新计算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]
此外,在Python中,如果你的getter没有参数,请使用 properties代替getters:
class CLClass(object):
@property
def A(self):
class CLClass(ojbect):
def getA(self):
然后您可以使用obj.A
而不是obj.getA()
访问该媒体资源
{{1}}。