python类装饰器即__call__方法
上一篇中我对学习过程中的装饰器进行了总结和整理,这一节简单整理下类装饰器
1.类中的__call__方法:
我们在定义好一个类后,实例化出一个对象,如果对这个对象以直接在后边加括号的方式进行调用,程序就会报错。也就是在类中这种做法是错误的;
而,如果一个类中写入了__call__方法,当我问在对实例对象以括号的方式进行调用时,__call__方法中的语句就会被执行,代码如下:
import time
# 定义一个Time类
class Time(object):
def __init__(self,a):
self.a = a
def __call__(self, *args, **kwargs):
print(self.a )
# 对类进行实例化
now = time.ctime()
c = Time(now)
# 调用类中的call方法
c()
# 结果为:Tue Jun 12 17:28:53 2018
2.类作为装饰器的底层原理和上一篇中所谈到的是一致的,以下边代码为示例:
# 定义一个Time类
class Time(object):
def __init__(self,func): # 注意这里要设定参数接收Test
self._func = func
def __call__(self):
print('我可以对函数进行装饰')
print("----------------------------")
self._func() @Time # 等价于 Test = Time(Test)
def Test():
print('测试一下可不可以.') Test() #结果为:
#我可以对函数进行装饰
#----------------------------
#测试一下可不可以.
python类装饰器即__call__方法的更多相关文章
- python 函数 装饰器的使用方法
一.装饰器 首先,我们要了解到什么是开放封闭式原则? 软件一旦上线后,对修改源代码是封闭的,对功能的扩张是开放的,所以我们应该遵循开放封闭的原则. 也就是说:我们必须找到一种解决方案,能够在不修改一 ...
- Python类总结-析构函数和__call__方法
class Foo: def __init__(self): pass #析构函数 def __del__(self): print('解释器要销毁我了,我要做最后一次呐喊') def __call_ ...
- python 类装饰器
class Test(): def __init__(self, func): print('装饰器1') self.__func = func def __call__(self): print(' ...
- 类装饰器,元类,垃圾回收GC,内建属性、内建方法,集合,functools模块,常见模块
'''''''''类装饰器'''class Test(): def __init__(self,func): print('---初始化---') print('func name is %s'%fu ...
- python 描述符 上下文管理协议 类装饰器 property metaclass
1.描述符 #!/usr/bin/python env # coding=utf-8 # 数据描述符__get__ __set__ __delete__ ''' 描述符总结 描述符是可以实现大部分py ...
- 详解Python闭包,装饰器及类装饰器
在项目开发中,总会遇到在原代码的基础上添加额外的功能模块,原有的代码也许是很久以前所写,为了添加新功能的代码块,您一般还得重新熟悉源代码,稍微搞清楚一点它的逻辑,这无疑是一件特别头疼的事情.今天我们介 ...
- python高级 之(二) --- 类装饰器
装饰器-初级 在不改变原有函数逻辑功能的基础上,为函数添加新的逻辑功能.使代码可读性更高.结构更加清晰.冗余度更低 简介 """ 闭包: 函数嵌套的格式就是闭包.写装饰器 ...
- python 进阶篇 函数装饰器和类装饰器
函数装饰器 简单装饰器 def my_decorator(func): def wrapper(): print('wrapper of decorator') func() return wrapp ...
- python 装饰器(七):装饰器实例(四)类装饰器装饰类以及类方法
类装饰器装饰类方法 不带参数 from functools import wraps import types class CatchException: def __init__(self,orig ...
随机推荐
- iframe在firefox下的无法正常target问题
今日在改一个网站的时候碰到个奇葩的问题. 把网站按照结构划分,做了个主页面,嵌入iframe,设定该iframe的name,主页面上的链接使用target保证在iframe中打开该链接. 听上去很常规 ...
- springboot 用redis缓存整合spring cache注解,使用Json序列化和反序列化。
springboot下用cache注解整合redis并使用json序列化反序列化. cache注解整合redis 最近发现spring的注解用起来真的是很方便.随即产生了能不能吧spring注解使用r ...
- [Bzoj1001][BeiJing2006]狼抓兔子(网络流/对偶图)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 看到大佬们都是对偶图过的,写了个最大流水过去了QAQ,网络流的无向图直接建双向边( ...
- JAVA二维码编码&解码
QRCodeUtil.java package web; import java.awt.AlphaComposite; import java.awt.Color; import java.awt. ...
- 异常-throw的概述以及和throws的区别
package cn.itcast_06; /* * throw:如果出现了异常情况,我们可以把该异常抛出,这个时候的抛出的应该是异常的对象. * * throws和throw的区别(面试题) thr ...
- 103、Swarm如何管理存储数据?(Swarm10)
参考https://www.cnblogs.com/CloudMan6/p/8000906.html Service 的容器副本会 scale up/down ,会 failover,会在不同的主 ...
- spring基于注解的IoC以及IoC的案例
1.Spring中IoC的常用注解 1.1明确: (1)基于注解的配置和xml的配置要实现的功能都是一样的,都是要降低程序之间的耦合,只是配置的形式不一样 2.案例:使用xml方式和注解方式实现单表的 ...
- 使用python的selenium库刷超星网课
网课很多看不完呀 所以动手做了一个基础的自动答题和下一节的程序 用到了python 3 selenium Chrome 如何自动化Chrome?https://www.cnblogs.com/eter ...
- javascript原型与原型链个人理解
想了解原型和原型链,我觉得首先我们得知道javascript里有一个Object 与 Function,它俩都是构造函数,当然函数也是一个对象.我们打印Object 与 Function看一下, co ...
- int 问号的使用
单问号---为泛型 Nullable<int> 的简写方式. 双问号---用于判断前一个操作数是否为null,如为null则"返回"后一个操作数,否则"返回& ...