首页 > 其他 > 详细

被装饰的函数保存元数据

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

函数被装饰器装饰后会失去原本的属性和元数据,为了保存原因的元数据,使用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__‘,)

 

被装饰的函数保存元数据

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!