Python使用类的方式写带参数的装饰器

# 使用类的方式写 带参数的装饰器
import time


class GetExecTime:
    def __init__(self, sec):
        self.sec = sec

    def __call__(self, func):
        self.func = func
        return self.wrapper

    def wrapper(self, *args, **kwargs):
        for i in range(self.sec):
            print(f"距离函数执行还有{self.sec - i}秒钟")
            time.sleep(1)
        t1 = time.time()
        result = self.func(*args, **kwargs)
        t2 = time.time()
        print(f"函数执行时间是:{t2 - t1}秒")

        return result


@GetExecTime(5)
def myfunc(n):
    k = 0
    for i in range(n):
        k = i
    return k


if __name__ == '__main__':
    r = myfunc(99996666)
    print(r)

################################################################################

# 不带参数的装饰器
import time


class SleepFunc:
    def __init__(self, func):
        self.func = func

    def __call__(self, *args, **kwargs):
        for i in range(5):
            print(f"休眠{5 - i}秒后启动")
            time.sleep(1)
        ret = self.func(*args, **kwargs)
        return ret


@SleepFunc
def test(name):
    print(f"我的名字是{name}")


test("刘德华")

 

posted @ 2022-06-09 17:34  zanze  阅读(260)  评论(0)    收藏  举报