3
我有限的理解是types.FunctionTypes(dict
)的第二个参数决定了函数代码可用的内容。我很好奇它是如何在内部实例化函数时得到决定的。为了说明我的意思,如果我尝试动态复制一个函数:什么是和不可用的类方法在python中?
a = 'test'
def foo():
print(a)
bar = types.FunctionType(
foo.__code__,
globals(),
'bar',
foo.__defaults__,
foo.__closure__
)
这似乎与globals(),但我错过了什么吗?更令人困惑的是类方法。如果我做这样的事情:
a = 'test'
class Foo(object):
b = 'Foo prints this'
def myfunc():
print(a, self.b)
Bar = type('Bar', tuple(), dict())
Bar.b = 'Bar prints this'
ns = globals()
#should I do ns.update(something) here?
f = Foo.myfunc
Bar.myfunc = types.FunctionType(f.__code__, ns, 'myfunc', ...)
这个例子的工作原理,但不是这个更复杂的一个:
import imp
import builtins
class Foo(object):
def __init__(self):
super().__init__() # super(Foo, self) also fails
mod = imp.new_module('test')
mod.__builtins__ = builtins
mod.Foo = type('Foo', tuple(), dict())
f = Foo.__init__
ns = {}
ns.update(mod.__dict__) #missing something here
mod.Foo.__init__ = types.FunctionTypes(f.__code__, ns, '__init__', ...)
有人能照亮应在ns
什么?什么是可用的类方法,什么不是?
我并不是专门试图让上面的代码工作,我更多地寻找解释为什么它没有。
这绝对是这个谜题的一部分,一旦我想出了如何创建一个闭包并将其传入,'超(Foo,self)'工作。但不是'super()'。人力资源管理。 – colinmarc 2012-04-03 17:21:02