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

class Test(object):def __init__(self, func):print('----装饰-----')print('func name is %s' % func.__name__)self.__func = funcdef __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 函数.

转载于:https://www.cnblogs.com/cccy0/p/9060387.html

python__高级 : 类当作装饰器相关推荐

  1. python类装饰器应用_python之描述符应用与类的装饰器

    一.描述符应用 1.1上下文管理协议 在上文中我们提到with语句中的上下文管理器.with语句可以如此简单但强大,主要依赖于上下文管理器.那么什么是上下文管理器?上下文管理器就是实现了上下文协议的类 ...

  2. python装饰器类-python装饰器2:类装饰器

    本文是装饰器相关内容的第二篇,关于类装饰器. "类装饰器"有两种解读方式:用来装饰类的装饰器:类作为装饰器装饰其它东西.你如何认为取决于你,两种说法都有出现在其它的文章中.我的文章 ...

  3. python装饰器类-Python装饰器15-开始使用类作为装饰器

    基于前面的使用函数作为装饰器的理解,将类作为装饰器时需要保证以下几点 类的实例是可调用的 类需要一个地方讲被装饰的函数传入到类的实例里 第一条可以通过__call__实现,第二条可以通过__init_ ...

  4. 50 Python - 装饰器 类定义装饰器

    04 类定义装饰器 上节通过函数定义装饰器,本节通过类定义装饰器 001 定义类装饰器 定义一个类,类里面两个函数,一个构造函数init(),一个调用函数call() 构造函数init时候,传递一个函 ...

  5. django class类即视图类添加装饰器的几种方法

    根据别人发布整理,个人爱好收集(原文:https://blog.csdn.net/mydistance/article/details/83958655 ) 一.定义视图类 定义类视图,且类视图继承自 ...

  6. 初学者python笔记(类的装饰器、property方法、元类)

    文章目录 上下文协议管理 类的装饰器基本原理 property方法的巧用 利用描述符自定制property property下的setter与deleter Python的元类 元类的概念 自定义元类 ...

  7. django 类视图装饰器_灵活视图处理的模式,第2部分–使用装饰器

    django 类视图装饰器 For years, we've been so busy discussing the virtues and drawbacks of the model/contro ...

  8. python 类的使用(5)之类装饰器(类的装饰器和类作为装饰器)

    在阅读博客中,发现了类装饰器的存在,由于之前就在写类相关的专栏,这次就赶紧补上之前的内容啦.类装饰器这个词是有歧义的,因为类本身可以作为装饰器,一个类也可以被函数装饰器所装饰.今天就简单介绍一下这两种 ...

  9. Django框架之CBV类视图及类视图装饰器

    前言 这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题 于是乎,我自己开发了一款面试宝典,希 ...

最新文章

  1. Windows Android SDK下载安装,配置,异常问题解决教程
  2. Tkinter的Checkbutton组件的简单使用
  3. Monthly Expense POJ - 3273(二分最大值最小化)
  4. oc基础-self关键字的使用
  5. JEECG-P3开发专题 - 开发环境搭建入门
  6. zz Makefile学习教程: 跟我一起写 Makefile
  7. 调用 WebService 请求因 HTTP 状态 407 失败
  8. Codeforces 19E 树上差分
  9. 计算机主板常见故障检修,电脑主板常见故障以及维修知识
  10. JavaScript快速入门
  11. Android报错:The processing instruction target matching [xX][mM][lL] is not allowed.
  12. Haar特征提取算法的实现
  13. U盘大容量存储设备 感叹号,错误10
  14. composer下面composer.lock有什么用处 以及 如何优雅地删除它
  15. LT6105电流检测放大器介绍
  16. 微信注册崩溃?appid签名无法注册or如何查看签名是否一致?如何注册appid?jks和keystore的区别?
  17. 舞象云出席泰华商城智慧营销系统上线发布会,问道传统百货新未来
  18. 3ds max7渲染传奇三剑客VRay教程(PDF)
  19. 【论文阅读】Multi-hop Question Answering via Reasoning Chains
  20. 转:彻底搞定期货穿透式CTP API接入

热门文章

  1. CentOS 7 的初始化
  2. Last_Error: Relay log read failure: Could not parse relay log event entry.
  3. 谈谈android反编译和防止反编译的方法
  4. OpenSceneGraph 笔记--如何导出三角形数据
  5. 关于MySQL内核,一定要知道的!
  6. PyCUDA学习:gpuarray与kernel的抽象原型
  7. 织梦手机网站建设 并配置二级域名
  8. 2 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之MySql的搭建
  9. 在C++工程中设置全局函数
  10. 如何弹出UIDatePicker最好