Python在标准库中是否有装饰器?

时间:2011-08-19 10:34:08

标签: python decorator

除了@staticmethod@classmethod之外?大多数语言都有一些使用大多数语言功能的基本库。

似乎我发现自己制作的许多装饰器都是很多人都会使用的东西,但我还没有发现任何内置的python装饰器。有这样的事吗?

4 个答案:

答案 0 :(得分:21)

property通常用作装饰器。

functools有几个通常用作装饰器的功能,例如total_orderingupdate_wrappedlru_cachewraps

contextlib有contextmanager装饰器。

请记住,您可以将任何函数用作装饰器:

@decorator
def function(): pass

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

为了有用,它们通常需要期望可调用作为参数,并且它们需要返回可调用对象。 (property是第二部分的例外。)

也可以用完全相同的方式修饰类。

还有list of decorators on the Python Wiki。其中一些是在标准库中,有些则不是。

答案 1 :(得分:8)

答案 2 :(得分:1)

没有库本身,但有用装饰器的汇编在http://wiki.python.org/moin/PythonDecoratorLibrary

答案 3 :(得分:0)

Python装饰器只是普通函数或其他可调用函数,它们将要装饰的函数或类作为单个参数。因此,您可以使用许多普通函数作为装饰器,反之亦然。作为装饰器的可能用途通常没有明确记录。