Python怎么实现装饰器

技术Python怎么实现装饰器小编给大家分享一下Python怎么实现装饰器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!普通装饰器:直接上代码

边肖告诉你Python是如何实现装饰器的。相信大部分人还是不太了解他们。因此,我想分享这篇文章供你参考。希望你看完这篇文章后收获多多。让我们一起来看看。

普通装饰器:

,编码就行了。

defdemo(func_test):

defwrapper():

打印(“定义的第一个装饰器”)

func_test()

打印(“装饰器结束”)

Returnwrapper#注意不要在这里添加括号。

@demo

deffunc_test():

打印('小白!')9500.163.com

直接使用自定义装饰器增强的原始方法。

带参数的装饰器:

defdemo(func_test):

defwrapper(名称):

打印(“定义的第一个装饰器”)

func_test(名称)

打印('哦,您是%s' %name '。

打印(“装饰器结束”)

returnwrapper

@demo

deffunc_test(名称):

打印('你好,我叫% s'% name) Python怎么实现装饰器

是不是有点感觉。

然后是没有自定义参数的装饰器。

defdemo(func_test):

defwrapper(*name,**kwargs):

打印(“定义的第一个装饰器”)

func_test(*name,**kwargs)

打印('哦,您是%s' %name[0])。

打印('您今年%s岁了' %name[1])。

打印(“装饰器结束”)

returnwrapper

@demo

deffunc_test(姓名、年龄):

打印('你好,我的名字是%s'%name)

打印('今年{} '。格式(年龄))Python怎么实现装饰器

不是简短的回答吗?哈哈哈哈

多种装饰一起使用。

defdeco01(func):

defwrapper(*

args,**kwargs):
        print('第一层的装饰器')
        func(*args,**kwargs)
        print('第一层装饰器结束')
    return wrapper
def deco02(func):
    def wrapper(*args,**kwargs):
        print('这是第二层装饰器')
        print('第二层装饰器结束')
        func(*args, **kwargs)
    return wrapper
@deco02
@deco01
def func(a,b,c,name):
    print('hello ,here is a func')
    print("result is %d" %(a+b+c))
    print('name:{}'.format(name))

Python怎么实现装饰器

看看执行顺序可以看出装饰器是从上往下执行的。
类装饰器:
在使用装饰器时我们总不能在一个文件里写的都是装饰器和各个方法吧,总是要分开的。这里就要是讲一个类装饰器。
这里呢,我大概了写了一个读取文件装饰器的例子。

class Mydecorator():
    def __init__(self,func):
    # 定义为私有属性
        self.func = func
    # 实现__call__方法,让对象变成可以调用的对象,可调用的对象可以想函数那样使用
    def __call__(self, *args, **kwargs):   
        print('测试类装饰器')
        self.func(*args)
        catalogue = args[0]
        suffix = catalogue.split('.')[2]
        try:
            if suffix == 'json':
                with open(*args,'r',encoding='utf-8') as file_object:
                    contents = json.load(file_object)
                    print(contents)
            else:
                with open(*args,'r',encoding='utf-8') as file_object:
                    contents = file_object.read()
                    print(contents)
        except Exception as a:
            print('读取文件出错拉:{}'.format(a))
@Mydecorator
def name(name):
    print('请输入对应文件路径:%s'%name)

Python怎么实现装饰器

以上是“Python怎么实现装饰器”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/65905.html

(0)

相关推荐

  • 同性恋的原因,为啥现在的同性恋那么多

    技术同性恋的原因,为啥现在的同性恋那么多同性恋产生的原因至今尚无肯定的学说,一般认为与以下因素有关同性恋的原因:
    (1)遗传因素,有人发现同性恋者在单卵双生子中远比双卵双生子中多见,而且男同性恋可能是母系遗传的。
    (2)

    生活 2021年10月30日
  • 数据库读写分离的坑有哪些

    技术数据库读写分离的坑有哪些这篇文章主要讲解了“数据库读写分离的坑有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“数据库读写分离的坑有哪些”吧!前言事情是这样的,刚入

    攻略 2021年10月22日
  • Redis缓存的淘汰策略是什么

    技术Redis缓存的淘汰策略是什么这篇文章主要讲解了“Redis缓存的淘汰策略是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis缓存的淘汰策略是什么”吧!Re

    攻略 2021年10月27日
  • PaaStorm如何将数据从源实时转换到目标?

    技术PaaStorm是如何从源到目的做数据的实时转换这篇文章主要介绍“PaaStorm是如何从源到目的做数据的实时转换”,在日常操作中,相信很多人在PaaStorm是如何从源到目的做数据的实时转换问题上存在疑惑,小编查阅

    攻略 2021年12月23日
  • 什么是翡翠,一个好翡翠的标准是什么

    技术什么是翡翠,一个好翡翠的标准是什么什么样的翡翠什么是翡翠,才是好翡翠:1、种够老。种老的翡翠,肉质紧致,密度大,抛光的亮度高,才会有翡翠特有的珠光宝气;2、水头足。种水,是两个概念,种老的翡翠,未必水头足,水头足的翡

    生活 2021年10月27日
  • 通勤是什么意思,中国移动通勤流量包什么意思

    技术通勤是什么意思,中国移动通勤流量包什么意思通勤流量就是在上下班通勤时间的指定流量,以郑州移动9.99元通勤流量包为例,10G通勤流量包包含10G国内流量,流量有效期为订购当月每天6:00-9:00,17:00-20:

    生活 2021年11月1日