码迷,mamicode.com
首页 > 其他好文 > 详细

被装饰的函数保存元数据

时间:2017-04-17 18:34:36      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:one   div   update   style   assigned   tools   print   span   wrapper   

函数被装饰器装饰后会失去原本的属性和元数据,为了保存原因的元数据,使用functools下的wraps下的装饰器

未使用装饰器装饰时:

def mydecorator(fun):

    def wrap(*args):
        print I am mydecorator
        fun(*args)
    return wrap()


def example():

    print sdsdsd

print example.__name__
print example.__doc__

运行结果:

example
None

使用装饰器后

def mydecorator(fun):

    def wrap(*args):
        print I am mydecorator
        fun(*args)
    return wrap()


@mydecorator
def example():

    print sdsdsd

print example.__name__
print example.__doc__

运行结果:name的属性为装饰器的属性

wrap
None

 

加入装饰器后:

from functools import update_wrapper, wraps, WRAPPER_ASSIGNMENTS, WRAPPER_UPDATES


def mydecorator(func):
    @wraps(func) #使用装饰器,同样有assigned=(),updated=()有默认值WRAPPER_ASSIGNMENTS和 WRAPPER_UPDATES
    def wrap(*args, **kwargs):
        print I am mydecorator
        func(*args, **kwargs)
    ‘‘‘第一种,保持原来的元组数据‘‘‘
    #update_wrapper(wrap, func,assigned=(),updated=()) 这两个assigned=(),updated=()有默认值WRAPPER_ASSIGNMENTS和 WRAPPER_UPDATES
    return wrap


@mydecorator
def example():

    print sdsdsd

print example.__name__
print example.__doc__

print WRAPPER_ASSIGNMENTS
print WRAPPER_UPDATES
 

 

结果:

example
None
(‘__module__‘, ‘__name__‘, ‘__doc__‘)
(‘__dict__‘,)

 

被装饰的函数保存元数据

标签:one   div   update   style   assigned   tools   print   span   wrapper   

原文地址:http://www.cnblogs.com/misslin/p/6724203.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!