Python类相关的装饰器
一、装饰器装饰类方法
from functools import wraps
def wrapper(func):
@wraps(func)
def inner(self,*args,**kwargs):
# 此时的self是Person的实例对象
self.name += "爱吃糖"
# func ===> printInfo
ret = func(self,*args,**kwargs)
return ret return inner class Person(object):
def __init__(self,name):
self.name = name @wrapper
def printInfo(self):
print(self.name) # printInfo ==> wraper(printInfo) ==> inner
Person("张三").printInfo() # 张三爱吃糖
二、类装饰器实现单例模式
def wrapper(obj):
def inner(name,*args,**kwrags):
if not obj.instance:
obj.instance = obj(name)
return obj.instance
return inner @wrapper
class Person(object):
instance = None
def __init__(self,name):
self.name = name def printInfo(self):
print(self.name) zs = Person('张三')
zs.printInfo()
print(id(zs)) ls = Person('李四')
ls.printInfo()
print(id(ls))
三、给装饰器写log
import time
from functools import wraps def log(func):
@wraps(func)
def inner(fun,*args,**kwargs):
print("%s执行了"%(func))
ret = func(fun)
return ret
return inner @log
def wraper(func):
@wraps(func)
def inner(*args,**kwargs):
start_time = time.time()
ret = func()
endtime = time.time() - start_time
print(endtime)
return ret
return inner @wraper
def func():
time.sleep(5)
print("func执行了") # wraper(func) ==>log(wraper) ==>inner
# func() ==> wraper(func)==>inner
func()
Python类相关的装饰器的更多相关文章
- Python类中的装饰器在当前类中的声明与调用
[本文出自天外归云的博客园] 我的Python环境:3.7 在Python类里声明一个装饰器,并在这个类里调用这个装饰器.代码如下: class Test(): xx = False def __in ...
- python类里面使用装饰器
参考:http://m.blog.csdn.net/blog/wklken/8118942 def on(name, *args_of_on, **kwargs_of_on): def handle_ ...
- 第六种方式,python使用cached_property缓存装饰器和自定义cached_class_property装饰器,动态添加类属性(三),selnium webdriver类无限实例化控制成单浏览器。
使用 from lazy_object_proxy.utils import cached_property,使用这个装饰器. 由于官方的行数比较少,所以可以直接复制出来用自己的. class cac ...
- python 装饰器 第九步:使用类来作为装饰器
#第九步:使用类来作为装饰器 class kuozhan: #接收装饰器的参数(函数outer) def __init__(self,arg): print(self,arg)#arg就是la sel ...
- Python 第五天 装饰器
装饰器 装饰器是函数,只不过该函数可以具有特殊的含义,装饰器用来装饰函数或类,使用装饰器可以在函数执行前和执行后添加相应操作. def wrapper(func): def result(): pri ...
- python中面向对象之装饰器
python面向对象内置装饰器property,staticmethod,classmethod的使用 @property 装饰器作用及使用 作用:面向对象中的方法伪装成属性 使用如下: class ...
- 第7.26节 Python中的@property装饰器定义属性访问方法getter、setter、deleter 详解
第7.26节 Python中的@property装饰器定义属性访问方法getter.setter.deleter 详解 一. 引言 Python中的装饰器在前面接触过,老猿还没有深入展开介绍装饰 ...
- 5.python(迭代器,装饰器,生成器,基本算法,正则)
一,迭代器 1.迭代器 (1)迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问完结束.迭代器只能往前不会后退. (2)对于原生支持随机访问的数据结构(如t ...
- Python中利用函数装饰器实现备忘功能
Python中利用函数装饰器实现备忘功能 这篇文章主要介绍了Python中利用函数装饰器实现备忘功能,同时还降到了利用装饰器来检查函数的递归.确保参数传递的正确,需要的朋友可以参考下 " ...
随机推荐
- C++ STL 常用遍历算法
C++ STL 常用遍历算法 STL的容器算法迭代器的设计理念 1) STL的容器通过类模板技术,实现数据类型和容器模型的分离 2) STL的迭代器技术实现了遍历容器的统一方法:也为STL的算法提供了 ...
- [洛谷P4091][HEOI2016/TJOI2016]求和
题目大意:给你$n(n\leqslant10^5)$,求:$$\sum\limits_{i=0}^n\sum\limits_{j=0}^i\begin{Bmatrix}i\\j\end{Bmatrix ...
- BZOJ2276 [Poi2011]Temperature 【单调队列】
题目链接 BZOJ2276 题解 一开始看错题,以为求的是可以不连续的,想出一个奇怪的线段树,发现空间根本开不下?? 题目要我们求连续的最长可能不下降区间 对于区间\([l,r]\)如果合法,当且仅当 ...
- linux内核分析 第七周读书笔记
第七章 链接 1.链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载到存储器并执行. 2.链接可以执行于编译时,加载时,运行时. 7.1编译器驱动程序 1.大多数编译系统 ...
- 单点登录(十七)----cas4.2.x登录mongodb验证方式成功后返回更多信息更多属性到客户端
我们在之前已经完成了cas4.2.x登录使用mongodb验证方式登录成功了.也解决了登录名中使用中文乱码的问题. 单点登录(十三)-----实战-----cas4.2.X登录启用mongodb验证方 ...
- 解题:Poetize6 IncDec Sequence
题面 差分原数列得到差分数组$dif$,这样对于$dif[2]->dif[n]$会多出来两个“空位置”$1$和$n+1$.然后区间加减就变成了使一个位置$+1$,另一个位置$-1$(可以对“空位 ...
- QT 菜单资源设置
版权声明 该文章原创于Qter开源社区(www.qter.org),作者yafeilinux,转载请注明出处! 导语 在前一篇中我们学习了使用资源文件为主窗口添加菜单图标.这次,我们 ...
- C++统一初始化
.C++中指定初始化值的方式有4种方式: ()小括号 ); ()等号 ; ()大括号 }; ()等号和大括号 }; .C++11统一初始化, 即使用大括号初始化方式, 其使用场景主要有以下3种: () ...
- Java入门系列(二)Java常用关键字
53个关键字 在JAVA中目前一共有53个关键字:其中由51+2个保留字=53个关键字 访问控制 private protected public default 类.方法和 ...
- [整理]C中的静态存储区
静态存储区:即内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.它主要存放静态数据.全局数据和常量.栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些 ...