【问题标题】:Does Python have decorators in the standard library?Python 在标准库中有装饰器吗?
【发布时间】:2011-10-30 12:35:52
【问题描述】:

除了@staticmethod@classmethod?大多数语言都有一些基本库,利用了大部分语言特性。

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

【问题讨论】:

    标签: python decorator


    【解决方案1】:

    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。有些在标准库中,有些不在。

    【讨论】:

      【解决方案2】:
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 我在回答中提到了这一点,并举了一个例子。
        猜你喜欢
        • 2011-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-27
        • 2011-06-28
        • 2018-08-20
        • 2017-04-10
        相关资源
        最近更新 更多