0

各メソッドにデコレータを手動で追加するのではなく、特定の単語で始まる特定のメソッドにデコレータを動的に追加できる、クラスのデコレータを作成することを考えています。

それを行う方法はありますか?

4

1 に答える 1

2

以下のコード例は、その方法を示しています。

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()
于 2013-03-22T16:34:24.487 に答える