首页 > 编程语言 >python装饰器之类装饰器

python装饰器之类装饰器

时间:2022-08-24 11:58:01浏览次数:57  
标签:__ python res args func kwargs 之类 装饰

类装饰器

需求

需求: 需要给一个多方法的py文件加上如果其中一个函数出现异常,其余继续执行,然后也统计每个函数的运行时间

定义一个类装饰器 test.py

import time
from functools import wraps


class MyDec:
    """我的类装饰器"""

    def __test(sel, func, *args, **kwargs):
        """
        处理函数异常,这是一个前置函数
        """
        try:
            res = func(*args, **kwargs)
        except:
            res = None
            print(func.__name__, "执行失败")
        return res

    def __call__(self, func):
        """
        重构call函数,实现类装饰器
        func:使用了装饰器的函数本身
        """

        @wraps(func)
        def wrapper(*args, **kwargs):
            t1 = time.time()
            # res = func(*args, **kwargs)
            # 在这里使用前置函数
            res = self.__test(func, *args, **kwargs)
            t2 = time.time()
            print("运行时间:", t2 - t1)
            return res

        return wrapper

调用装饰器 test2.py

from test import MyDec

# 类装饰器应用时一定要加上()
@MyDec()
def classssss(x, y):
    print("我要使用类装饰器")
    x/y


if __name__ == '__main__':
    classssss(1, 1)
    print("发生异常后是否还执行")

标签:__,python,res,args,func,kwargs,之类,装饰
From: https://www.cnblogs.com/jiyanjiao-702521/p/16619341.html

相关文章

  • python:cmd管道
    commands=f"""[email protected]/data/wwwroot/csjs2_client_devgitpullssh://[email protected]:2483/data/repos/csjs2_client_dev.git"""impo......
  • python02-数据类型
    身份验证is;type(name)isint返回值为true或false、isnot;type(name)isnotint返回值为true或false三元运算d=aifa>15elsebd=值1if条件Ael......
  • 浅谈Python中的in,可能有你不知道的
    Python中的in,没那么简单,虽然也不难https://docs.python.org/zh-cn/3.9/reference/expressions.html#membership-test-operations6.10.2成员检测运算运算符in和no......
  • 【python基础教程】-10.开箱即用(模块的工作原理,获悉模块的功能以及常用模块)
    资料来源(1)Python基础教程第三版1.模块的工作原理1.1简单的模块及使用1.1.1模块的本质(1)模块就是程序,任何python程序都可以作为模块导入;1.1.2简单的模块示......
  • python 二次封装logging,打印日志文件名正确,且正确写入/结合pytest执行,日志不输出的问
    基于之前日志问题,二次封装日志后,导致日志输出的文件名不对,取到的文件一直都是当前二次封装的log的文件名,基于这个问题,做了优化,详细看https://www.cnblogs.com/cuitang/p/1......
  • 牌的组合数-python
    问:四个人玩牌,去掉大小王,一个人拿牌的组合有多少种可能方法一:DFS#牌的组合数.常识:13*4+2=54张牌。每一类大小可以拿的张数有:0,1,2,3,4。问:四个人玩牌,一个人拿牌的......
  • Python_13包
    一、包1、包用于将一组模块归并到一个目录中,将有联系的模块组织在一起,可以有效避免模块名称冲突问题,让应用组织更加清晰。2、Python语法要求每个包都必须有__init__.py文......
  • linux安装python3
    Linux安装python3.7.13以下例子服务器为:centos7官网下载安装包https://www.python.org/downloads/上传到服务器#我是把包放在了/usr/local下Python-3.7.13.tgz......
  • linux安装python虚拟环境并启动python程序
    安装python虚拟环境并启动python应用安装虚拟环境#安装virtualenv虚拟环境工具pip37为python命令安装python应用时创建的/usr/bin/pip37pip37installvirtuale......
  • python 3 条件判断
    条件判断:if语句ifelse语句     循环:   range(5)是生成小于5的0,1,2,3,4,如果加上一个list[range(5)]就是生成一个列表[0,1,2,3,4]如果计算0-100的整......