メタクラスを使用してクラスにインスタンスメソッドを追加するにはどうしたらいいですか(はい、メタクラスを使用する必要があります)?次の作品のようなものが、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インスタンスを必要としています。私はここでsometing行方不明ですか?
なぜあなたは、メソッドの名前を変更しようとしていますか? do [bar.func_name] = barはあなたが望むものを達成できないのですか? –
良い質問...私は当初、dictで定義された属性に基づいてメソッド名を作成していましたが、メソッドの実装が同一であれば無意味です。 –