Как добавить метод экземпляра в класс с использованием метакласса (да, мне нужно использовать метакласс)? Следующий вид работ, но 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. Я мог бы сделать:
dict["foobar"] = types.FunctionType(bar.func_code, {}, "foobar")
Существует также types.MethodType, но мне нужен экземпляр, который does'nt существует еще использовать. Разве я здесь не встречаюсь?
Почему вы пытаетесь изменить имя метода? не dict [bar.func_name] = bar выполняет то, что вы хотите? – 2008-09-15 19:03:13
Хороший вопрос ... Я изначально создавал имена методов на основе атрибутов, определенных в dict, но я понимаю, что это бессмысленно, если реализации методов идентичны. – 2008-09-15 19:30:18