zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    Opencv之像素值的获取
    亚像素级角点检测
    Shi-Tomasi角点检测
    卡尔曼滤波
    Harris角点检测理论
    ROS2GO 与WIN10 双系统安装
    数字集成电路物理设计学习总结——物理设计建库域验证
    跨时钟域信号传输(二)——数据信号篇
    跨时钟域信号传输(一)——控制信号篇
    亚稳态与多时钟切换
  • 原文地址:https://www.cnblogs.com/caodneg7/p/10446049.html
Copyright © 2011-2022 走看看