除了@staticmethod
和@classmethod
之外?大多数语言都有一些使用大多数语言功能的基本库。
似乎我发现自己制作的许多装饰器都是很多人都会使用的东西,但我还没有发现任何内置的python装饰器。有这样的事吗?
答案 0 :(得分:21)
property通常用作装饰器。
functools有几个通常用作装饰器的功能,例如total_ordering
,update_wrapped
,lru_cache
和wraps
。
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装饰器只是普通函数或其他可调用函数,它们将要装饰的函数或类作为单个参数。因此,您可以使用许多普通函数作为装饰器,反之亦然。作为装饰器的可能用途通常没有明确记录。