python装饰器之类装饰器

类装饰器

需求

需求: 需要给一个多方法的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("发生异常后是否还执行")
posted @ 2022-08-24 11:45  jiyanjiao  阅读(60)  评论(0编辑  收藏  举报