美文网首页
python 装饰器 元类

python 装饰器 元类

作者: 浮华_e823 | 来源:发表于2018-09-04 08:42 被阅读0次

    装饰器

    python装饰器本质上就是一个函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外的功能,装饰器的返回值也是一个函数对象(函数的指针)。
    实质: 是一个函数
    参数:是你要装饰的函数名(并非函数调用)
    返回:是装饰完的函数名(也非函数调用)
    作用:为已经存在的对象添加额外的功能
    特点:不需要对对象做任何的代码上的变动

    装饰器作用

    装饰器最大的作用就是对于我们已经写好的程序,我们可以抽离出一些雷同的代码组建多个特定功能的装饰器,这样我们就可以针对不同的需求去使用特定的装饰器,这时因为源码去除了大量泛化的内容而使得源码具有更加清晰的逻辑。

    函数的函数装饰器

    import time
    def decorator(func):
        def wrapper(*args, **kwargs):
            start_time = time.time()
            func()
            end_time = time.time()
            print(end_time - start_time)
    
        return wrapper
    
    @decorator 
    def func():
        time.sleep(0.8)
    
    func() # 函数调用
    # 输出:0.800644397735595
    

    类方法的函数装饰器

    import time
    
    def decorator(func):
        def wrapper(me_instance):
            start_time = time.time()
            func(me_instance)
            end_time = time.time()
            print(end_time - start_time)
        return wrapper
    
    class Method(object):
    
        @decorator 
        def func(self):
            time.sleep(0.8)
    
    p1 = Method()
    p1.func() # 函数调用
    

    通用装饰器

    def aa(fun):
        def inner(*args,**kwargs):
            print('啦啦')                
            return fun(*args,**kwargs)
        return inner
    

    有参通用装饰器

    def w(a):
        def w1(fun):
            def inner(*args,**kwargs):
                if a == 1 :
                    print('验证1')
                elif a == 2:
                    print('验证2')
                return fun(*args,**kwargs)
           return inner
        retrn w1
    
    @w(1)
    def play (a,b):
        print('现在是下午%d点%d分'%(a,b))
    play(3,30)
    
    @w(2)
    def play1():
        print('啦啦啦')
    play1()
    

    元类

    元类是一个类的类。就像一个类定义一个类的实例的行为一样,元类定义了一个类的行为。一个类是元类的一个实例。

    相关文章

      网友评论

          本文标题:python 装饰器 元类

          本文链接:https://www.haomeiwen.com/subject/gmwwwftx.html