python装饰器由浅入深_由浅入深,走进Python装饰器-----第五篇:进阶--类装饰类

**类装饰器**

@类

4.1 用类装饰器来扩展原函数( 增加属性和方法 )

# 用类装饰器来扩展原函数, 通过对象函数化触发__call__方法,进行返回

class KuoZhan():

def __call__(self,cls):

return self.newfunc(cls)

def good(self):

print("新增的方法!")

def newfunc(self,cls):

def in_newfunc():

cls.addpty = "新增的属性"

cls.good = KuoZhan.good

# 此处返回的是一个实例化对象

return cls()

return in_newfunc

@KuoZhan() #1. KuoZhan() ==> obj 2. @KuoZhan()==> @obj ==> obj( ) 3. @KuoZhan() == obj( MyClass), ,触发__call__ ,得到 in_newfunc

class MyClass():

def func(self):

print("我是原类的方法")

# MyClass实际就是in_newfunc, MyClass() == in_newfunc() , 所以 obj = cls()

obj = MyClass()

obj.func()

obj.good()

print(obj.addpty)

>>>我是原类的方法

>>>新增的方法啦!

>>>新增的属性

原文:https://blog.51cto.com/dldxzjr/2388362

你可能感兴趣的:(python装饰器由浅入深)