首先__call__
方法。
def func():
print('hello')
func()
print(func())
# 调用--->call--->啥啥的不能called
#
对应的,类实例对象的调用,需要使用到__call__
特殊方法
class Student:
def __init__(self, name):
self.name = name
def __call__(self, classmate):
print('我的名字是%s,我的同桌是%s' % (self.name, classmate))
stu = Student('sb')
stu('bc')
用类实现装饰器
通过__init__``__call__
方法实现
class Test:
def __init__(self, func):
print('装饰器准备装饰')
self.__func = func
def __call__(self, *args, **kwargs):
print('Wrapper Context')
print('Before')
self.__func(*args, **kwargs)
print('After')
@Test
def show():
print('hello')
print('flag')
show()
#装饰器准备装饰
#flag
#Wrapper Context
#Before
#hello
#After