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 回答