2015-10-15 70 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或更新版本,是的。舊版本只支持函數/方法裝飾器。