python__高级 : 类当作装饰器
类在创建对象时,会调用 __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__高级 : 类当作装饰器相关推荐
- python类装饰器应用_python之描述符应用与类的装饰器
一.描述符应用 1.1上下文管理协议 在上文中我们提到with语句中的上下文管理器.with语句可以如此简单但强大,主要依赖于上下文管理器.那么什么是上下文管理器?上下文管理器就是实现了上下文协议的类 ...
- python装饰器类-python装饰器2:类装饰器
本文是装饰器相关内容的第二篇,关于类装饰器. "类装饰器"有两种解读方式:用来装饰类的装饰器:类作为装饰器装饰其它东西.你如何认为取决于你,两种说法都有出现在其它的文章中.我的文章 ...
- python装饰器类-Python装饰器15-开始使用类作为装饰器
基于前面的使用函数作为装饰器的理解,将类作为装饰器时需要保证以下几点 类的实例是可调用的 类需要一个地方讲被装饰的函数传入到类的实例里 第一条可以通过__call__实现,第二条可以通过__init_ ...
- 50 Python - 装饰器 类定义装饰器
04 类定义装饰器 上节通过函数定义装饰器,本节通过类定义装饰器 001 定义类装饰器 定义一个类,类里面两个函数,一个构造函数init(),一个调用函数call() 构造函数init时候,传递一个函 ...
- django class类即视图类添加装饰器的几种方法
根据别人发布整理,个人爱好收集(原文:https://blog.csdn.net/mydistance/article/details/83958655 ) 一.定义视图类 定义类视图,且类视图继承自 ...
- 初学者python笔记(类的装饰器、property方法、元类)
文章目录 上下文协议管理 类的装饰器基本原理 property方法的巧用 利用描述符自定制property property下的setter与deleter Python的元类 元类的概念 自定义元类 ...
- django 类视图装饰器_灵活视图处理的模式,第2部分–使用装饰器
django 类视图装饰器 For years, we've been so busy discussing the virtues and drawbacks of the model/contro ...
- python 类的使用(5)之类装饰器(类的装饰器和类作为装饰器)
在阅读博客中,发现了类装饰器的存在,由于之前就在写类相关的专栏,这次就赶紧补上之前的内容啦.类装饰器这个词是有歧义的,因为类本身可以作为装饰器,一个类也可以被函数装饰器所装饰.今天就简单介绍一下这两种 ...
- Django框架之CBV类视图及类视图装饰器
前言 这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题 于是乎,我自己开发了一款面试宝典,希 ...
最新文章
- Windows Android SDK下载安装,配置,异常问题解决教程
- Tkinter的Checkbutton组件的简单使用
- Monthly Expense POJ - 3273(二分最大值最小化)
- oc基础-self关键字的使用
- JEECG-P3开发专题 - 开发环境搭建入门
- zz Makefile学习教程: 跟我一起写 Makefile
- 调用 WebService 请求因 HTTP 状态 407 失败
- Codeforces 19E 树上差分
- 计算机主板常见故障检修,电脑主板常见故障以及维修知识
- JavaScript快速入门
- Android报错:The processing instruction target matching [xX][mM][lL] is not allowed.
- Haar特征提取算法的实现
- U盘大容量存储设备 感叹号,错误10
- composer下面composer.lock有什么用处 以及 如何优雅地删除它
- LT6105电流检测放大器介绍
- 微信注册崩溃?appid签名无法注册or如何查看签名是否一致?如何注册appid?jks和keystore的区别?
- 舞象云出席泰华商城智慧营销系统上线发布会,问道传统百货新未来
- 3ds max7渲染传奇三剑客VRay教程(PDF)
- 【论文阅读】Multi-hop Question Answering via Reasoning Chains
- 转:彻底搞定期货穿透式CTP API接入
热门文章
- CentOS 7 的初始化
- Last_Error: Relay log read failure: Could not parse relay log event entry.
- 谈谈android反编译和防止反编译的方法
- OpenSceneGraph 笔记--如何导出三角形数据
- 关于MySQL内核,一定要知道的!
- PyCUDA学习:gpuarray与kernel的抽象原型
- 织梦手机网站建设 并配置二级域名
- 2 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之MySql的搭建
- 在C++工程中设置全局函数
- 如何弹出UIDatePicker最好