0

与えられた:

  1. クラス インスタンス (CL) と参照インスタンス (r) のセット
  2. クラスには、「getA」、「getB」などのいくつかの getter があります。

Todo: 'getA', 'getB', ... を比較して、'r' に一致する CL のインスタンスを見つける.

私のコードは次のようになります。

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 にするための 2 つの提案を次に示します。

  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 では、ゲッターが引数を取らない場合は、ゲッターの 代わりにプロパティを使用します。

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

    それ以外の

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

    obj.A次に、代わりに を 使用してプロパティにアクセスできますobj.getA()

于 2012-10-16T12:35:55.057 に答える