2015-10-15 83 views

回答

2

是的,当然。

装饰器只是一个参数的函数。该参数可以是一个类。

#!/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)。

0

是,您可以:

def bar(cls): 
    print("decorating {}".format(cls)) 

@bar 
class Foo(object): 
    pass 

会打印:

decorating <class '__main__.Foo'> 
0

在Python 2.6或更新版本,是的。旧版本只支持函数/方法装饰器。