1

这段代码可以简单地说明我的问题:

def 继续(自我,* args):
  我的名字 = ???
  func = getattr(otherobj, myname)
  结果 = 函数(*args)
  # 结果 = ... 处理结果 ..
  返回结果


类调度(对象):
  def __init__(self, cond=1):
    对于范围内的索引(1,cond):
      setattr(self, 'step%u' % (index,), new.instancemethod(proceed, self, dispatch)

在该调度实例之后必须有 step1..stepn 成员,它们调用 otherobj 中的相应方法。怎么做?或者更具体地说:在 'myname =' 之后必须插入什么?

4

2 回答 2

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 回答
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 回答