博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python类相关的装饰器
阅读量:4650 次
发布时间:2019-06-09

本文共 1485 字,大约阅读时间需要 4 分钟。

一、装饰器装饰类方法

from functools import wrapsdef wrapper(func):    @wraps(func)    def inner(self,*args,**kwargs):        # 此时的self是Person的实例对象        self.name += "爱吃糖"        # func ===>  printInfo        ret = func(self,*args,**kwargs)        return ret    return innerclass Person(object):    def __init__(self,name):        self.name = name    @wrapper    def printInfo(self):        print(self.name)# printInfo ==> wraper(printInfo) ==> innerPerson("张三").printInfo()# 张三爱吃糖

二、类装饰器实现单例模式

def wrapper(obj):    def inner(name,*args,**kwrags):        if not obj.instance:            obj.instance = obj(name)        return obj.instance    return inner@wrapperclass 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 timefrom functools import wrapsdef log(func):    @wraps(func)    def inner(fun,*args,**kwargs):        print("%s执行了"%(func))        ret = func(fun)        return ret    return inner@logdef 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@wraperdef func():    time.sleep(5)    print("func执行了")# wraper(func) ==>log(wraper) ==>inner# func() ==> wraper(func)==>innerfunc()

 

转载于:https://www.cnblogs.com/weihengblog/p/9379601.html

你可能感兴趣的文章
获得屏幕像素以及像素密度
查看>>
int与string转换
查看>>
adb命令 判断锁屏
查看>>
推荐一个MacOS苹果电脑系统解压缩软件
查看>>
1035等差数列末项计算
查看>>
CDMA鉴权
查看>>
ASP.NET MVC Identity 兩個多個連接字符串問題解決一例
查看>>
过滤器与拦截器区别
查看>>
USACO 1.5.4 Checker Challenge
查看>>
第二阶段站立会议7
查看>>
[18]Debian Linux Install GNU GCC Compiler and Development Environment
查看>>
JAVA多线程
查看>>
ACE(Adaptive Communication Environment)介绍
查看>>
delphi 更改DBGrid 颜色技巧
查看>>
python编码问题
查看>>
POJ 2031 Building a Space Station
查看>>
面向对象1
查看>>
编程开发之--java多线程学习总结(5)
查看>>
如何让 zend studio 10 识别 Phalcon语法并且进行语法提示
查看>>
任意阶幻方(魔方矩阵)C语言实现
查看>>