python 装饰器 第九步:使用类来作为装饰器

#第九步:使用类来作为装饰器
class kuozhan:
    #接收装饰器的参数(函数outer)
    def __init__(self,arg):
        print(self,arg)#arg就是la
        self.arg = arg
    #制作一个内部函数(真正的装饰器  函数kuozhan)
    def __call__(self,func):
        print(self,func)#func就是eat函数
        #将func函数存入对象
        self.func = func
        return self.neweat
    #在面向对象过程当中不提倡内使用内部函数,要提到前面
    #定义称为一个成员方法
    def neweat(self):
        # 扩展功能1
        print('饭前洗洗手')
        # 调用基本函数
        self.func()
        # 扩展功能2
        print('饭后溜溜腿')
#基本函数
@kuozhan('la')# 相当于 result = kuozhan("la"), eat = result(eat) reuslt是实例对象 被当做函数调用触发__call__函数
def eat():
    print('吃饭')
#调用函数 eat在某种程度上算是kuozhan类的实例对象 把它当函数调用触发 call 魔术方法
print(eat)
eat()
原文地址:https://www.cnblogs.com/zhangboblogs/p/8018720.html