*每天都有新体验
装饰者模式
理解示例:
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
|
#coding=utf8
class foo(object):
def f1(self):
print("or f1")
def f2(self):
print("or f2")
class foo_d(object):
def __init__(self,de):
self._de = de
def f1(self):
print("de f1")
def __getattr__(self,name):
return getattr(self._de,name)
t = foo()
v = foo_d(t)
t.f1()
v.f1()
v.f2()
######out
or f1
de f1
or f2
[Finished in 0.1s]
|
__getattr__(self,name) 可以像字典一样查找属性。在装饰器中就是获取被包装类的属性。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#coding=utf8
import functools
def log(text):
@functools.wraps(text)
def wrapper(*args,**kwargs):
print("wrapper")
return text(*args,**kwargs)
return wrapper
@log
def now():
print("time")
now()
#####output
wrapper
time
[Finished in 0.1s]
|
- 方法就是通过@标签定义一个包装器方法,再在被包装方法前加响应的标签就会被包装起来了。