首页 > 编程语言 >Python装饰器

Python装饰器

时间:2023-03-26 23:22:52浏览次数:26  
标签:logging 函数 title Python print 方法 装饰

装饰器实质上就是一个python函数,在保证原始业务代码不做任何修改的情况下利用切面的原则动态地增加额外的操作功能

def logging(func): # 接收一个当前执行函数或方法的对象fun(该对象为@logging装饰器声明的方法引用)
    def wrapper(*args, **kwargs):
        print("[Logging-INFO]:进入%s方法", func.__name__)
        return func(*args, **kwargs) # 基于fun对象实现核心业务方法的调用
    return wrapper

class Message:
    def print_title(self):
        print("南京科技公司")

    @logging
    def print_url(self):
        print("https://www.baidu.com")


if __name__ == "__main__":
    m = Message()
    # 不使用@符号传统装饰器包装方法
    title = logging(m.print_title) # 入参为函数,调用业务方法
    title() # 加括号表示调用装饰函数

    # 使用@装饰器调用
    m.print_url()
    print(m.print_title.__name__)
    

输出:
[Logging-INFO]:进入%s方法 print_title
南京科技公司
[Logging-INFO]:进入%s方法 print_url
https://www.baidu.com
print_title

对比使用装饰器方法:

  1. 不使用装饰器包装方法

title = logging(m.print_title) # 入参为函数,调用业务方法

title() # 加括号表示调用装饰函数

  1. 采用@装饰器方法更简洁

定义logging函数作为程序中的装饰器,函数接收一个当前执行函数或方法的对象func(该对象为@logging装饰器声明的方法引用)。同时在内部定义wrap()内嵌装饰函数,在此函数中实现日志的输出,并基于func对象实现核心业务方法的调用。

m.print_url()

 

标签:logging,函数,title,Python,print,方法,装饰
From: https://www.cnblogs.com/Lina-zhu/p/17259929.html

相关文章

  • python工程里面的类型的思考
    虽然我的工程语言是python语言,在工程搭建过程中非常注意类型提示的问题。关于方法的方法的返回值类型的问题:常用的方式是在函数/方法书写一些尖头+类型,这样调用方能很方......
  • Python3.0 新特性
    这篇文章主要介绍了相比于python2.6,python3.0的新特性。更详细的介绍请参见python3.0的文档。CommonStumblingBlocks本段简单的列出容易使人出错的变动。  *prin......
  • Python函数闭包(看一遍就懂系列)
    闭包的定义定义:闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+引用环境)下面这个就是一个简单的闭包函数defExFunc(n):sum=ndefInsFunc():......
  • Python多任务-多线程-多进程-协程-进阶学习
    --多任务-多线程-多进程-协程-进阶学习--文中所提到的案例参考:GITHUB中项目文件夹https://github.com/FangbaiZhang/Python_advanced_learning/tree/master/02_Python_ad......
  • CMD窗口中运行python脚本(虚拟环境下运行py文件)
    项目文件夹创建虚拟环境参考博文:WIN10系统下的Python3.7安装虚拟环境virtualenv和创建Web网站下面以Python_advanced_learning项目文件中的005_MiniWeb_Web服务器_实现模......
  • python+selenium实现在某瓣上自动批量获取中文电影的英文名称
    一、需求背景知道一些电影的中文名称,但是想在国外网站上,查一下这些中文电影的评分。因此就必须知道这些中文电影的英文名称是什么,由此诞生次脚本 二、实现思路通过sele......
  • python3实现阿里云短信发送功能
    #-*-coding:utf-8-*-importuuidimportsysimportjsonimportuuidfromaliyunsdkcore.clientimportAcsClientfromaliyunsdkcore.profileimportregion_pr......
  • Python实例讲解 -- 操作数据库 附mysqldb win32 py2.7下载
    mysql是一个优秀的开源数据库,它现在的应用非常的广泛,因此很有必要简单的介绍一下用python操作mysql数据库的方法。python操作数据库需要安装一个第三方的模块,在http://mysq......
  • Python实例讲解 -- 解析xml
    doc.xml <?xmlversion="1.0"encoding="utf-8"?><info><intro>信息</intro><listid='001'><head>auto_userone</head><name>Jordy</name>......
  • Python字符串的encode与decode
    首先要搞清楚,字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成......