2011-08-19 32 views
15

除了@staticmethod@classmethod?大多數語言都有一些使用大多數語言功能的基本庫。Python在標準庫中有裝飾器嗎?

看來,我發現自己製作的許多裝飾器都是噸人將使用的東西,但我還沒有找到任何內置的python裝飾器來做它們。有這樣的事情嗎?

回答

20

property通常用作裝飾器。

functools有幾個功能通常用作裝飾,如total_orderingupdate_wrappedlru_cache,和wraps

contextlib擁有contextmanager裝飾器。

請記住,你可以使用任何功能作爲裝飾:

@decorator 
def function(): pass 

只是一樣

def function(): pass 
function = decorator(function) 

爲了有用,他們通常需要被期待可調用作爲參數,他們需要返回一個可調用的對象。 (property是第二部分的例外。)

類也可以用完全相同的方式裝飾。

還有一個list of decorators on the Python Wiki。其中一些在標準庫中,一些則不在。

0

Python的裝飾器是其中取作爲單個參數的函數或類待裝飾只是簡單的功能或其它可調用。因此,您可以使用許多普通函數作爲裝飾器,反之亦然。可能用作裝飾器通常沒有明確記錄。

+0

我在回答中提到了這個問題,並舉了一個例子。 – agf