码迷,mamicode.com
首页 > 编程语言 > 详细

python__高级 : 类当作装饰器

时间:2018-05-19 17:01:04      阅读:436      评论:0      收藏:0      [点我收藏+]

标签:color   高级   object   %s   init   --   pytho   *args   效果   

类在创建对象时,会调用 __init__ 初始化一些东西 , 然后 如果类中定义了 __call__ 方法,可以直接用  对象()  这种方法调用,所以可以用类来装饰函数:

class Test(object):
    def __init__(self, func):
        print(----装饰-----)
        print(func name is %s % func.__name__)
        self.__func = func

    def __call__(self, *args, **kwargs):
        print(装饰器中的功能)
        self.__func()

@Test
def test():
    print(------test-------)

>>>----装饰-----
   func name is test

首先 @Test 就是   test = Test(test)  先创建了Test类的一个对象 这个时候 test 就不是指向函数了,而是一个 Test类的对象,传进去的参数 func 才是真正的 test 函数的引用,调用 __init__ 方法初始化之后,就是打印出来的效果.

然后如果调用  test() :

>>>----装饰-----
   func name is test
   装饰器中的功能
   ------test-------

因为现在 test是Test类的一个实例,所以 直接调用 test() 就相当于调用了 __call__ 方法 ,里面实现了打印一句话 以及调用传进去的 self.__func() 这个时候才执行了原本的 test 函数.

python__高级 : 类当作装饰器

标签:color   高级   object   %s   init   --   pytho   *args   效果   

原文地址:https://www.cnblogs.com/cccy0/p/9060387.html

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