当前位置: 首页 > news >正文

【代码模板】Python Decorator / 装饰器

基本概念

在 python 里面,函数是一个对象,但是是 callable 的对象,因此后面可以接 () 传入参数。这也说明函数可以被当作参数传入其他的函数里面,同时函数也可以作为返回值。

一般装饰器

可以将 decorator 理解为一个函数,他的输入是 @dec 下面接着的函数,输出由 dec 函数定义决定。

def dec(f): pass @dec 
def double(x): return x * 2 # 上述 @dec 等价于
double = dec(double)

@decorator 还可以带参数。

@timeit(10) 
def double(x): return x * 2 # 等价于 
double = timeit(10)(double) 
# timeit(10)先执行,通常返回一个函数,然后再输入double进一步执行并返回

装饰类

def decorator(cls):print("这里可以写被装饰类新增的功能") return cls# 定义一个类 A,并使用decorator装饰器装饰
@decorator # 装饰器的本质 A = decorator(A),装饰器返回类本身,还是之前的类,只是在返回之前增加了额外的功能
class A(object):def __init__(self):passdef test(self):print("test")

类装饰器

装饰器本身可以是一个类。使用类装饰器主要依靠类的 __call__ 方法,当使用 @ 形式将装饰器附加到函数上时,就会调用此方法。

class Foo(object):def __init__(self, func):self._func = funcdef __call__(self):print ('class decorator runing')self._func()print ('class decorator ending')@Foo
def bar():print ('bar')bar()# 程序输出:
# class decorator runing
# bar
# class decorator ending

上面的例程中,@Foo 首先执行 __init__,将 bar 作为初始化参数。之后调用 bar() 时,实际调用的是用 Foobar 实例化后的 Foo.__call__()


http://www.mrgr.cn/news/38066.html

相关文章:

  • AI产品经理学习路径:从零基础到精通,从此篇开始!
  • 前端框架对比与选择:Vue.js、React、Angular及其他
  • 信号处理: Block Pending Handler 与 SIGKILL/SIGSTOP 实验
  • MySQL 临时表
  • Java | Leetcode Java题解之第441题排列硬币
  • HarmonyOS故障恢复实践
  • 时间安全精细化管理平台/iapp/mobile/facereg/facereg.html接口存在未授权访问漏洞
  • springboot农产品销售信息微信小程序—计算机毕业设计源码35557
  • 既然有HTTP协议,为什么还要有RPC?
  • VGA/HDMI/DP接口和USB、串口通信协议
  • manim中获取并定位不规则页面的中心位置
  • Pandas空值识别,空值填充,空值过滤方法超详细解读
  • Java | Leetcode Java题解之第442题数组中重复的数据
  • OLMo - 训练和使用AI2 模型
  • 一款革命性的AI写作工具——文字游侠AI大模型重大升级,创作效率提高高达20倍,小白也能轻松实现月入过万!
  • Leetcode 740. 删除并获得点数
  • 衡石分析平台系统管理手册-功能配置之AI 助手集成嵌入指南
  • Stable Diffusion零基础学习
  • 电子电路智能设计课程内容是什么?
  • 解锁工具宝库,助力高效编程的诀窍