上一篇:由浅入深,走进Python装饰器-----第二篇:进阶--函数装饰函数
类装饰器
@类
函数
2.1 用类装饰器来扩展原函数( 对象() )
# 用类装饰器来扩展原函数, 通过对象函数化触发__call__方法,进行返回
class KuoZhan():
def __call__(self,f):
return self.newfunc(f)
def newfunc(self,f):
def in_newfunc():
print("1")
f()
print("2")
return in_newfunc
@KuoZhan() #1. KuoZhan() ==> obj 2. @obj ==> obj( ) 3. func = obj( func)
def func():
print("我是原函数")
func()
>>>1
>>>我是原函数
>>>2
2.2 用类装饰器来扩展原函数( 类.方法 )
# 直接调用类方法
class KuoZhan():
def newfunc(f):
def in_newfunc():
print("1")
f()
print("2")
return in_newfunc
@KuoZhan.newfunc # 直接类调用 1. @KuoZhan.newfunc ==> KuoZhan.newfunc() 2. func = KuoZhan.newfunc(func) = in_newfunc(func)
def func():
print("我是原函数")
func()
>>>1
>>>我是原函数
>>>2
2.3.1 类装饰类里的方法( 对象() )
# 用类装饰器来扩展原函数, 通过对象函数化触发__call__方法,进行返回
class KuoZhan():
def __call__(self,f):
return self.newfunc(f)
def newfunc(self,f):
def in_newfunc():
print("1")
f()
print("2")
return in_newfunc
class MyClass():
@KuoZhan() #1. KuoZhan() ==> obj 2. @obj ==> obj( ) 3. func = obj( func)
def func():
print("我是原函数")
#调用方式: 类.方法
MyClass.func()
>>>1
>>>我是原函数
>>>2
2.3.2 类装饰类里的方法( 对象() ) --------- 注意调用方式及参数使用
# 用类装饰器来扩展原函数, 通过对象函数化触发__call__方法,进行返回
class KuoZhan():
def __call__(self,f):
return self.newfunc(f)
def newfunc(self,f):
def in_newfunc(self):
print("1")
f()
print("2")
return in_newfunc
class MyClass():
@KuoZhan() #1. KuoZhan() ==> obj 2. @obj ==> obj( ) 3. func = obj( func)
# 此处虽然是类方法,但修饰过后,已经是绑定对象方法 in_newfunc(self)
def func():
print("我是原函数")
#调用方式: 对象.方法
mc = MyClass()
mc.func()
>>>1
>>>我是原函数
>>>2
2.3.3 类装饰类里的方法( 对象() ) --------- 注意调用方式及参数使用
# 用类装饰器来扩展原函数, 通过对象函数化触发__call__方法,进行返回
class KuoZhan():
def __call__(self,f):
return self.newfunc(f)
def newfunc(self,f):
def in_newfunc(self):
print("1")
f(self)
print("2")
return in_newfunc
class MyClass():
@KuoZhan() #1. KuoZhan() ==> obj 2. @obj ==> obj( ) 3. func = obj( func)
# 此处是绑定对象方法
def func(self):
print("我是原函数")
#调用方式: 对象.方法
mc = MyClass()
mc.func()
>>>1
>>>我是原函数
>>>2
2.4.1 类装饰类里的方法( 类.方法 )
# 直接调用类方法
class KuoZhan():
def newfunc(f):
def in_newfunc():
print("1")
f()
print("2")
return in_newfunc
class MyClass():
@KuoZhan.newfunc #1. KuoZhan() ==> obj 2. @obj ==> obj( ) 3. func = obj( func)
def func():
print("我是原函数")
#调用方式: 类.方法
MyClass.func()
>>>1
>>>我是原函数
>>>2
2.4.2 类装饰类里的方法( 类.方法 ) --------- 注意调用方式及参数使用
# 直接调用类方法
class KuoZhan():
def newfunc(f):
def in_newfunc(self):
print("1")
f()
print("2")
return in_newfunc
class MyClass():
@KuoZhan.newfunc #1. KuoZhan() ==> obj 2. @obj ==> obj( ) 3. func = obj( func)
# 此处虽然是类方法,但修饰过后,已经是绑定对象方法 in_newfunc(self)
def func():
print("我是原函数")
#调用方式: 对象.方法
mc = MyClass()
mc.func()
>>>1
>>>我是原函数
>>>2
2.4.3 类装饰类里的方法( 类.方法 ) --------- 注意调用方式及参数使用
# 直接调用类方法
class KuoZhan():
def newfunc(f):
def in_newfunc(self):
print("1")
f(self)
print("2")
return in_newfunc
class MyClass():
@KuoZhan.newfunc #1. KuoZhan() ==> obj 2. @obj ==> obj( ) 3. func = obj( func)
# 此处是绑定对象方法
def func(self):
print("我是原函数")
#调用方式: 对象.方法
mc = MyClass()
mc.func()
>>>1
>>>我是原函数
>>>2