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()
  • 相关阅读:
    JS 数组总结
    JS 数据类型及其判断
    CSS 优先级
    正则表达式及其使用例子
    常见的图片格式
    React 箭头函数的使用
    手动搭建 react+webpack 开发环境
    JS 函数参数及其传递
    JS 中的 this 指向问题
    JS 中函数的 length 属性
  • 原文地址:https://www.cnblogs.com/weihengblog/p/9379601.html
Copyright © 2011-2022 走看看