各メソッドにデコレータを手動で追加するのではなく、特定の単語で始まる特定のメソッドにデコレータを動的に追加できる、クラスのデコレータを作成することを考えています。
それを行う方法はありますか?
以下のコード例は、その方法を示しています。
def class_dec(starts_with,fun_dec):
def fun(cls):
for k,v in cls.__dict__.items():
if k.startswith(starts_with):
cls.__dict__[k] = fun_dec(v)
return cls
return fun
def fun_decorator(f):
def dec(*args,**kwargs):
print "I m decorating"
f(*args,**kwargs)
return dec
@class_dec("name",fun_decorator)
class Hello:
def name_new_one(self):
print "new one"
def name(self):
print "Hello"
h = Hello()
h.name()
h.name_new_one()