python 装饰器 元类

装饰器

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()

元类

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,860评论 25 709
  • 有一个背影让你想流泪,那是父亲的背影。有一个背影让我很心酸,这是我一位老师的背影。 人间多苦难,最苦相思无处道。这...
    _光亮_阅读 300评论 3 5
  • 人们都说,好好学习,天天向上。 天天向上,现在,快变成天天向下了。 确实有一点,学会的东西,过一段时间如果,不加强...
    李明涛阅读 163评论 0 0
  • 我从没想到我现在变得这样,变得如此焦燥浮夸,不切实际。我的经历不应该这样不应该让我变得如此颓废,而我竟然变成...
    夜殇沉风阅读 306评论 0 1
  • 那一年,我初一,遇见她,她说她叫青秋。 我们分在一个班,还是同桌,看着她脸上清纯无暇的笑,我知道,我的心沦陷了。 ...
    3d41a106efe2阅读 202评论 0 1