"""
用類寫裝飾器
func = decorator(func)
func('abc',18)
"""class decorator(object):
def __init__(self, f):
self.f = f
def __call__(self,*args,**kwargs):
print("decorator start")
self.f(*args,**kwargs)
print("decorator end")
@decorator
def func(name,age):
print("\' is ".format(name,age))
print("func")
func('abc',18)
用函式寫裝飾器
func1 = decorator1(func)
func1('abc',18)
'''@decorator1
def func1(name,age):
print("\' is ".format(name, age))
func1('abc',18)
def decorator1(f):
print("decorator start")
f(*args, **kwargs)
print("decorator end")
@decorator1
def func1(name,age):
print("\' is ".format(name, age))
func1('abc',18)
print("function \'s name is {}".format(func1.__name__))輸出為:
這是由於裝飾後的func其實相當於 func= decorator1(func)
而 func.__name ,也相當於decorator1(func) .__name__
消除這種影響的辦法是 使用 functools 工具包中的 wraps 裝飾器
1view codefrom functools import
wraps
2def
decorator1(f):
3@wraps(f)45
print("
decorator start")
6 f(*args, **kwargs)
7print("
decorator end")
8return910
@decorator1
11def
func1(name,age):
12print("
\' is
".format(name, age))
1314 func1('
abc',18)
15print("
function \'s name is {}
".format(func1.__name__))
輸入為:
decorator start
abc' is 18
decorator end
function 's name is func1
消除後顯示正常
posted @
2019-03-12 15:21
藍天008 閱讀(
...)
編輯收藏
函式裝飾器 類裝飾器
一 函式裝飾函式 defwrapfun func definner a,b print function name func.name r func a,b return r return inner wrapfun defmyadd a,b return a b print myadd 2,3 二...
python裝飾器 函式裝飾器,類裝飾器
只要實現此 模式,這個obj就叫乙個裝飾器 參考 函式裝飾器 例子 def decorator func def inner args,kwargs print before.res func args,kwargs print after.return res return inner decor...
python 裝飾器 函式裝飾器 類裝飾器
python函式裝飾器和類裝飾器筆記.usr bin env python coding utf 8 author ivan file decorators.py version from functools import wraps 裝飾器 目的是為了給函式新增附加功能 1.不帶引數裝飾器 此方式...