1

私の質問は、次のコードで簡単に説明できます。

defは(自己、*引数)を進めます:
  私の名前 = ???
  func = getattr(otherobj, myname)
  結果 = 関数 (*args)
  # 結果 = ... 処理結果 ..
  結果を返す


クラスディスパッチ(オブジェクト):
  def __init__(self, cond=1):
    範囲内のインデックス (1, cond):
      setattr(self, 'step%u' % (index,), new.instancemethod(proceed, self, dispatch)

その後、dispatch のインスタンスには、otherobj の対応するメソッドを呼び出す step1..stepn メンバーが必要です。どうやってするか?またはより具体的には、「myname =」の後に何を挿入する必要がありますか?

4

2 に答える 2

2

メソッドがstep1からstepnと呼ばれる場合は、次のようにする必要があります。

def proceed(myname):
    def fct(self, *args):
        func = getattr(otherobj, myname)
        result = func(*args)
        return result
    return fct

class dispatch(object):
    def __init__(self, cond=1):
        for index in range(1, cond):
            myname = "step%u" % (index,)
            setattr(self, myname, new.instancemethod(proceed(myname), self, dispatch))

名前がわからなければ、何をしようとしているのかわかりません。

于 2011-02-28T15:16:41.973 に答える
2

これが機能するかどうかはわかりませんが、クロージャを悪用することができます:

def make_proceed(name):
    def proceed(self, *args):
        func = getattr(otherobj, name)
        result = func(*args)
        # result = ... process result  ..
        return result
    return proceed


class dispatch(object):
  def __init__(self, cond=1):
    for index in range(1, cond):
      name = 'step%u' % (index,)
      setattr(self, name, new.instancemethod(make_proceed(name), self, dispatch))
于 2011-02-28T15:15:36.420 に答える