0

Python で関数を動的に呼び出し、次のようなコードが必要です。

class A:
    def show1(self, x) :
        print x

    def show2(self, x, y) :
        print x, y

    def callfunc(self, f, args) :
        #TODO: call function f with args
        pass

c = A()
c.callfunc(c.show1, [1])
c.callfunc(c.show2, [1,2])

しかし、callfunc で "show1" または "show2" を呼び出す方法がわかりません。「show1」と「show2」は引数の数が異なり、「args」はリストであるためです。

4

2 に答える 2

5

いつもと同じ。

def callfunc(self, f, args):
  f(*args)
于 2013-08-30T05:06:32.563 に答える
1

関数参照をパラメーターとして渡すことができる場合は、代わりに関数を直接呼び出すことができます。これを行うためのより柔軟な方法を次に示します

class A:
    def show1(self, x) :
        print x

    def show2(self, x, y) :
        print x, y

    def callfunc(self, f, args) :
        return getattr(self, f)(*args)

c = A()
c.callfunc("show1", [1])
c.callfunc("show2", [1,2])

この場合、呼び出す関数を動的に決定して呼び出すことができます。

于 2013-08-30T05:43:15.143 に答える