类装饰器:
import time class MyClass: def __init__(self, func): """需要接收一个被装饰的函数引用 相当于装饰器函数中外层函数的作用,接收 函数名 参数""" self._func = func def __call__(self, *args, **kwargs): """可以让一个对象变成可调用的对象 就是可以以 对象()这样的形式执行 相当于装饰器函数中内层函数,调用函数""" # 类装饰器可以实现的功能,没有装饰器函数的强大 print('call方法被调用了') res = self._func(*args, **kwargs) # self._func() 这样也可以 return res # 如果@后面的名字不是函数名,而是类名,称为类装饰器 # func1 = MyClass(func1) 创建一个实例对象<这个对象可以接受一个参数> @MyClass def func2(age): time.sleep(2) print('in f2:', age) # 判断一个对象是否可调用,如果:一个对象(),那么对象是可调用的 # 常见的可调用对象:类 函数 匿名函数 方法 实现了__call__()的对象 记住:普通的对象不可以 # 普通的实例对象不是可调用的 print(callable(func2)) # 写了__call__()方法就是可调用的 print(callable(MyClass)) func2(56) # callable 可被调用 """ 问题: 1.>func1 = MyClass(func1) 里面 的 func1 是啥? 是一个类创建的实例对象 2.>可调用对象的特点: 如何判断可调用? callable()或者 对象.() 3.>实现了__call__方法的实例对象就是. """