基本:使用闭包完成装饰器。
在调用之前手动包装:
1 def w1(func):
2
3 def inner():
4 print("--切面:调用方法前的验证--")
5 func()
6
7 return inner
8
9
10
11 def f1():
12 print("--f1--")
13
14 def f2():
15 print("--f2--")
16
17
18 #先手动调用w1将f1包装再返回
19 f1 = w1(f1)
20 f1()
21
22 f2 = w1(f2)
23 f2()
加上注解,就省去手动包装:
1 def w1(func):
2 def inner():
3 print("--切面:调用方法前的验证--")
4 if True:
5 func()
6 else:
7 print("您未通过验证!")
8 return inner
9
10
11
12 @w1 #和 f1 = w1(f1) 一样的效果
13 def f1():
14 print("--f1--")
15
16 @w1
17 def f2():
18 print("--f2--")
19
20
21
22 f1()
23 f2()
--切面:调用方法前的验证--
--f1--
--切面:调用方法前的验证--
--f2--
例子:
1 print("遇到 def makeBold(fn):")
2 def makeBold(fn):
3 print("正在装饰bold")
4 def inner():
5 print("---1---")
6 return "<b>"+fn()+"</b>"
7 return inner
8
9
10 print("遇到 def makeItalic(fn):")
11 def makeItalic(fn):
12 print("正在装饰italic")
13 def inner():
14 print("---2---")
15 return "<i>"+fn()+"</i>"
16 return inner
17
18
19 print("遇到 @makeBold")
20 @makeBold #text=makeBold(text)
21 @makeItalic #text=makeItalic(text)
22 def text():
23 print("---3---")
24 return "Hello World"
25
26
27 print("----调用----")
28 print(text())
29
30
遇到 def makeBold(fn):
遇到 def makeItalic(fn):
遇到 @makeBold
正在装饰italic
正在装饰bold
----调用----
---1---
---2---
---3---
<b><i>Hello World</i></b>
网友评论