3

重複の可能性:
関数の __code__ に引数を渡す方法は?

関数を表すコード オブジェクトがあります。コード オブジェクトを呼び出すときにexec、入力パラメーターの値を指定するにはどうすればよいpですか?

def x(p):
    print p

code_obj = x.__code__

exec code_obj
#TypeError: x() takes exactly 1 argument (0 given)
4

1 に答える 1

1

複製からの回答とコメントの再開:

import types
types.FunctionType(code_obj, globals={}, name='x')(1)

メソッドを操作するには、関数型またはバインドされていないメソッドを使用してから、インスタンスを最初のパラメーターとして渡すか、関数をインスタンスにバインドします。

class A(object):
    def __init__(self, name):
        self.name = name
    def f(self, param):
        print self.name, param

# just pass an instance as first parameter to a function or to an unbound method
func = types.FunctionType(A.f.__code__, globals={}, name='f')
func(A('a'), 2)
unbound_method = types.MethodType(func, None, A)
unbound_method(A('b'), 3)
# or bound the function to an instance
bound_method = types.MethodType(func, A('c'), A)
bound_method(4)
于 2012-06-21T13:24:27.403 に答える