我知道函数装饰器和类方法装饰器。
但是,是否也可以装饰类?
答案 0 :(得分:3)
是的,当然。
装饰器只是一个带参数的函数。该参数可以是一个类。
#!/usr/bin/env python3
def decorate(cls):
print(cls)
return cls
@decorate
class Foo: pass
此代码适用于python2和python3:
$ python example.py
__main__.Foo
$ python3 example.py
<class '__main__.Foo'>
对于函数装饰器,类装饰器可以返回任意对象。您可能希望返回表现为原始类的内容。您也可以动态修改类并返回类本身。
如果你打算为装饰者设置参数,我建议你this approach,恕我直言是最自然的(有偏见的建议:D)。
答案 1 :(得分:0)
是的,你可以:
def bar(cls):
print("decorating {}".format(cls))
@bar
class Foo(object):
pass
将打印:
decorating <class '__main__.Foo'>
答案 2 :(得分:0)
在Python 2.6或更高版本中,是的。旧版本仅支持函数/方法装饰器。