用Python functools.wraps實現裝飾器
轉載:http://blog.sina.com.cn/s/blog_3fe961ae0102v1xg.html#
Python裝飾器(decorator)在實現的時候,有一些細節需要被注意。例如,被裝飾後的函式其實已經是另外一個函式了(函式名等函式屬性會發生改變)。這樣有時候會對程式造成一些不便,例如筆者想對unittest框架中的一些函式新增自定義的decorator,新增後由於函式名和函式的doc發生了改變,對測試結果有一些影響。
所以,Python的functools包中提供了一個叫wraps的decorator來消除這樣的副作用。寫一個decorator的時候,最好在實現之前加上functools的wrap,它能保留原有函式的名稱和docstring。例如:
test_decorator.py |
# -*- coding=utf-8 -*-
from functools import wraps
def my_decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
print('Calling decorated function...')
return func(*args, **kwargs)
return wrapper @my_decorator
def example():
"""Docstring"""
print('Called example function')
print(example.__name__, example.__doc__)
列印出:example Docstring
相關文章
- Python 裝飾器之 functools.wrapsPython
- 用python 裝飾器打logPython
- python裝飾器2:類裝飾器Python
- python使用裝飾器實現的事件中心(監聽器)Python事件
- Python裝飾器探究——裝飾器引數Python
- Python 裝飾器你也會用Python
- Python 裝飾器Python
- Python裝飾器Python
- 裝飾器 pythonPython
- [Python小記] 裝飾器怎麼用 ?Python
- python 實現類屬性的懶載入裝飾器Python
- Python 裝飾器裝飾類中的方法Python
- Javascript中裝飾器的實現原理JavaScript
- Python裝飾器模式Python模式
- python的裝飾器Python
- 1.5.3 Python裝飾器Python
- Python 裝飾器(一)Python
- Python 裝飾器原理Python
- 草根學Python(十六) 裝飾器(逐步演化成裝飾器)Python
- python中的裝飾器的使用實戰Python
- python 之裝飾器(decorator)Python
- Python深入05 裝飾器Python
- Python裝飾器詳解Python
- Python中的裝飾器Python
- 【Python】淺談裝飾器Python
- 初識Python裝飾器Python
- Python 裝飾器的理解Python
- python裝飾器介紹Python
- 淺談Python裝飾器Python
- 通過 Python 裝飾器實現DRY(不重複程式碼)原則Python
- Python3 裝飾器解析Python
- Python 語法之裝飾器Python
- Python裝飾器高階用法Python
- python裝飾器入門探究Python
- python 裝飾器 part2Python
- python裝飾器有哪些作用Python
- python裝飾器是什麼Python
- Python 裝飾器簡單示例Python