如何使用元类向类添加实例方法(是的,我确实需要使用元类)?以下类型的作品,但 func_name 仍将是“foo”:
def bar(self):
print "bar"
class MetaFoo(type):
def __new__(cls, name, bases, dict):
dict["foobar"] = bar
return type(name, bases, dict)
class Foo(object):
__metaclass__ = MetaFoo
>>> f = Foo()
>>> f.foobar()
bar
>>> f.foobar.func_name
'bar'
我的问题是一些库代码实际上使用了 func_name 并且后来找不到 Foo 实例的 'bar' 方法。我可以做:
dict["foobar"] = types.FunctionType(bar.func_code, {}, "foobar")
还有 types.MethodType,但我需要一个尚不存在的实例来使用它。我在这里错过了什么吗?