Как добавить метод экземпляра в класс с помощью метакласса (да, мне нужно использовать метакласс)? Работает следующий вид, но 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 и позже не может найти метод 'bar' экземпляра Foo. Я мог бы сделать:
dict["foobar"] = types.FunctionType(bar.func_code, {}, "foobar")
Существует также types.MethodType, но мне нужен экземпляр, который еще не существует, чтобы использовать его. Я что-то здесь пропускаю?