如果可以更改从中调用装饰器的方式
class Foo(object): @many @decorators @here def bar(self): pass
至
class Foo(object): @register(many,decos,here) def bar(self): pass
那么您可以通过以下方式注册装饰器:
def register(*decorators): def register_wrapper(func): for deco in decorators[::-1]: func=deco(func) func._decorators=decorators return func return register_wrapper
例如:
def many(f): def wrapper(*args,**kwds): return f(*args,**kwds) return wrapperdecos = here = manyclass Foo(object): @register(many,decos,here) def bar(self): passfoo=Foo()
在这里,我们访问装饰器的元组:
print(foo.bar._decorators)# (<function many at 0xb76d9d14>, <function decos at 0xb76d9d4c>, <function here at 0xb76d9d84>)
在这里,我们仅打印装饰器的名称:
print([d.func_name for d in foo.bar._decorators])# ['many', 'decos', 'here']
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)