是否可以在Python中装饰类?
答
是的,当然。
装饰器只是一个参数的函数。该参数可以是一个类。
#!/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)。
答
是,您可以:
def bar(cls):
print("decorating {}".format(cls))
@bar
class Foo(object):
pass
会打印:
decorating <class '__main__.Foo'>
答
在Python 2.6或更新版本,是的。旧版本只支持函数/方法装饰器。