装饰器

  • 将类作为装饰器 (用类做装饰器)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#定义类作为装饰器
'''
1.可以带有区分或者使用的参数arg
2.具有接受基本函数传入的参数func
3.定义未来的函数 inner
'''
class Outer:
#初始化魔术方法
def __init__(self,arg): #相当与outer函数
#接受的参数为了其他成员方法可以使用 存入对象中
self.arg = arg

#一定要具有__call__魔术方法使得对象可以当作函数使用
def __call__(self,func):#[这是装饰器的本体 相当于 decor函数]
#将call接受的参数func 存入对象
self.func = func
#返回内部函数inner
return self.inner

# 定义内部函数inner
#将inner作为类的方法存在
def inner(self):
# 增加功能
print('抱抱')
# 基本功能
self.func()
# 增加功能2
print('举高高')

#基本函数
@Outer('ai') #@类() ->#@对象【对象可以当作函数使用】
def love():
print('亲亲')
#调用函数
love()
  • 为类添加装饰器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#定义装饰器
def decor(cls):
#定义内部信息(相当于原来的inner)
def inner():
#产生Human类的对象 [相当于基本功能]
obj = cls()
#添加内容 【相当于增加功能】
obj.age = 1
obj.sex = 'man'
#返回对象
return obj
#返回inner函数
return inner

#定义基本类
@decor
class Human:
pass

#使用类 实例化对象
ren = Human() #相当于调用Human函数 得到了一个结果【对象】
print(ren)
print(ren.__dict__)
  • 多层装饰器嵌套
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#定义装饰器1
def decor1(func):
#定义内部函数
def inner():
#增加功能1
print('抱抱')
#调用基本功能
func()
#增加功能2
print('举高高')
#返回内部函数
return inner

#定义装饰器2
def decor2(func):
#定义内部函数
def inner():
#增加功能
print('转转')
#基本功能
func()
#增加功能2
print('笑一笑')
#返回内部函数
return inner

#定义基本函数
@decor2
@decor1
def love():
print('亲亲')
#调用函数
love()