【发布时间】:2011-10-30 12:35:52
【问题描述】:
除了@staticmethod 和@classmethod?大多数语言都有一些基本库,利用了大部分语言特性。
似乎我发现自己制作的许多装饰器都是很多人会使用的东西,但我还没有找到任何内置的 python 装饰器可以做到这一点。有这种事吗?
【问题讨论】:
除了@staticmethod 和@classmethod?大多数语言都有一些基本库,利用了大部分语言特性。
似乎我发现自己制作的许多装饰器都是很多人会使用的东西,但我还没有找到任何内置的 python 装饰器可以做到这一点。有这种事吗?
【问题讨论】:
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。有些在标准库中,有些不在。
【讨论】:
不是库本身,但有用的装饰器汇编在http://wiki.python.org/moin/PythonDecoratorLibrary
【讨论】:
Python 装饰器只是普通函数或其他可调用函数,它们将要装饰的函数或类作为单个参数。因此,您可以使用许多普通函数作为装饰器,反之亦然。可能用作装饰器的用途通常没有明确记录。
【讨论】: