メタクラスを使用してクラスにインスタンス メソッドを追加するにはどうすればよいですか (はい、メタクラスを使用する必要があります)。次のような動作をしますが、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 もありますが、それを使用するにはまだ存在しないインスタンスが必要です。ここで何か不足していますか?