python装饰器跟JAVA中的面向切片编程(AOP)的思想是一致的,有种“雁过拔毛”的味道!
通俗的讲,就是,如果你(被装饰对象)被我(装饰者)装饰了,那么任何执行你的地方,都得先过来我这边“拔毛”,具体怎么拔毛,要看我(装饰器)怎么定义的了,我说了算!
python装饰器分为以下几种:
1,函数装饰器:用来装饰一个函数
函数装饰器本省又可以带参数,此参数既可以是类,又可以是普通的参数! (但这个仍影响不了其本质:函数装饰器)
2,类装饰器,用来装饰一个类
在这个例子中,装饰器把类的名称重新绑定到另一个类,这个类在一个封闭的作用域中保持了最初的类,并且当调用它的时候,创建并嵌入了最初的类的一个实例。当随后从该实例获取一个属性的时候,包装器的__getattr__拦截了它,并且将其委托给最初的类的嵌入的实例。此外,每个被装饰的类都创建一个新的作用域,它记住了最初的类。
就像函数装饰器一样,类装饰器通常可以编写为一个创建并返回可调用的对象的“工厂”函数,或者使用__init__或__call__方法来拦截所有调用操作的类,或者是由此产生的一些组合。工厂函数通常在封闭的作用域引用中保持状态,类通常在属性中保持状态