これは難しい。メソッドを動的に作成するだけでなく、デコレーターを関連付けたい。これは私が試したものです
import inspect
import types
class Dynamo(object):
pass
def call_me_dec(func):
print 'I am here'
return func
def add_dynamo(cls,i):
# @call_me_dec
def innerdynamo(self):
print "in dynamo %d" % i
return i
innerdynamo.__doc__ = "docstring for dynamo%d" % i
innerdynamo.__name__ = "dynamo%d" % i
setattr(cls, innerdynamo.__name__, innerdynamo)
def add_decorators(cls):
for name, fn in inspect.getmembers(cls):
if isinstance(fn, types.UnboundMethodType):
setattr(cls, name, call_me_dec(fn))
for i in range(2):
add_dynamo(Dynamo, i)
add_decorators(Dynamo)
d=Dynamo()
d.dynamo0()
d.dynamo1()
出力は次のとおりです。
I am here
I am here
in dynamo 0
in dynamo 1
期待される出力:
I am here
in dynamo 0
I am here
in dynamo 1
なぜこれが起こっているのか、どうすれば望ましい結果を得ることができるのかを説明してください。