zoukankan      html  css  js  c++  java
  • python__高级 : 类当作装饰器

    类在创建对象时,会调用 __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 函数.

  • 相关阅读:
    CSS权重
    object.create(null) 和 {}创建对象的区别
    CSS边框作图
    细说HTML头部标签
    利用a标签导出csv文件
    细说CSS伪类和伪元素
    HTML标签的权重
    《SPA设计与架构》之客户端路由
    《SPA设计与架构》之JavaScript模块化
    《SPA设计与架构》之MV*框架
  • 原文地址:https://www.cnblogs.com/cccy0/p/9060387.html
Copyright © 2011-2022 走看看