可以装饰类吗?
Is it possible to decorate classes?
我知道函数装饰器和 class 方法装饰器。
但是,是否也可以装饰classes?
当然可以。
装饰器只是一个带有参数的函数。该参数可以是 class.
#!/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'>
至于函数装饰器,class 装饰器可以return 任意对象。您可能想要 return 一些行为与原始 class 相同的东西。您还可以即时修改 class 和 return class 本身。
如果您打算为装饰器设置参数,我建议您 this approach,恕我直言,哪个是最自然的(有偏见的建议 :D)。
是的,你可以:
def bar(cls):
print("decorating {}".format(cls))
@bar
class Foo(object):
pass
将打印:
decorating <class '__main__.Foo'>
在 Python 2.6 或更新版本中,是的。旧版本仅支持 function/method 个装饰器。
我知道函数装饰器和 class 方法装饰器。
但是,是否也可以装饰classes?
当然可以。
装饰器只是一个带有参数的函数。该参数可以是 class.
#!/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'>
至于函数装饰器,class 装饰器可以return 任意对象。您可能想要 return 一些行为与原始 class 相同的东西。您还可以即时修改 class 和 return class 本身。
如果您打算为装饰器设置参数,我建议您 this approach,恕我直言,哪个是最自然的(有偏见的建议 :D)。
是的,你可以:
def bar(cls):
print("decorating {}".format(cls))
@bar
class Foo(object):
pass
将打印:
decorating <class '__main__.Foo'>
在 Python 2.6 或更新版本中,是的。旧版本仅支持 function/method 个装饰器。