为了账号安全,请及时绑定邮箱和手机立即绑定

在Python中添加方法到装饰器

在Python中添加方法到装饰器

长风秋雁 2022-08-02 18:23:48
在这个关于我可以看到的文档中,有可能使用点表示法在装饰器上调用函数,例如,我可以调用:lru_cachelru_cache_decorated_func.cache_info()我试图实现的是用我的自定义函数创建我自己的装饰器来调用它的工作原理,并且像.cache_info()那么,如何将这样的函数添加到装饰器中呢?
查看完整描述

1 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

装饰器只不过是(或小于)可调用返回可调用[0]的可调用[0]


@foo

def bar():

   ...

与以下内容完全相同:


def bar():

    ...

bar = foo(bar)

有各种选项可以“智能化”装饰器,lru_cache所做的非常简单:


它将装饰的函数包装在函数中wrapper

然后它设置为该函数的属性wrapper

并返回包装器(将原始函数交换为包装器)

import functools


def foo(fn):

    @functools.wraps(fn)

    def wrapper(*args, **kwargs):

        return fn(*args, **kwargs)

    wrapper.thing = 'yay'

    return wrapper


@foo

def bar(): ...


print(bar.thing)

将打印 .yay


[0] 甚至一个不可调用的,如 或 的情况。@property@cached_property


查看完整回答
反对 回复 2022-08-02
  • 1 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信