类装饰器

首先__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

你可能感兴趣的:(类装饰器)