博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 装饰器笔记
阅读量:6786 次
发布时间:2019-06-26

本文共 3313 字,大约阅读时间需要 11 分钟。

一、装饰器无参数

1.原函数无参数

def wrap_in_tag_b(fn): # wrap_in_tag_b 是真正的装饰器    def wrapped():        return "" + fn() + ""    return wrappeddef wrap_in_tag_i(fn):    def wrapped():        return "" + fn() + ""    return wrapped@wrap_in_tag_b@wrap_in_tag_idef hello():    return "hello"print(hello()) # returns "hello world"

 

2.原函数带参数

def wrap_in_tag_b(fn):    def wrapped(arg): # arg 是原函数参数        return "" + fn(arg) + ""    return wrappeddef wrap_in_tag_i(fn):    def wrapped(arg): # arg 是原函数参数        return "" + fn(arg) + ""    return wrapped@wrap_in_tag_b@wrap_in_tag_idef hello(name):    return "hello {}".formar(name)print(hello('Jack'))

 

二、装饰器带参数

1.原函数无参数

def wrap_in_tag(deco_arg):    # 装饰器参数:deco_arg    # 可以在任意位置使用    def real_decorator(func):  # real_decorator才是即将返回的真正的装饰器    # 原函数参数:func_arg     # 只可以在此位置使用     def wrapped() :            return "<{0}>{1}
".format(deco_arg, func()) return wrapped return real_decorator@wrap_in_tag('b')@wrap_in_tag('i')def hello(): return "hello" print(hello())

 

2.原函数带参数

def wrap_in_tag(deco_arg):    # 装饰器参数:deco_arg    # 可以在任意位置使用    def real_decorator(func):  # real_decorator才是即将返回的真正的装饰器        def wrapped(func_arg):            # 原函数参数:func_arg            # 只可以在此位置使用            return "<{0}>{1}
".format(deco_arg, func(func_arg)) return wrapped return real_decorator @wrap_in_tag('b')@wrap_in_tag('i')def hello(name): return "hello {}".format(name) print(hello('Jack'))

 

三、装饰器类

1.原函数无参数

class wrap_in_tag(object):    def __init__(self, deco_arg):        self.tag = deco_arg  # 装饰器参数:deco_arg    def __call__(self, func):        def newf(): # 原函数无参数            return "<{0}>{1}
".format(self.tag, func()) return newf@wrap_in_tag('b')@wrap_in_tag('i')def hello(): return 'hello' print(hello())

2.原函数带参数

class wrap_in_tag(object):    def __init__(self, deco_arg):        self.tag = deco_arg # 装饰器参数:deco_arg            def __call__(self, func):        def newf(func_arg): # 原函数参数: func_arg            return "<{0}>{1}
".format(self.tag, func(func_arg)) return newf@wrap_in_tag('b')@wrap_in_tag('i')def hello(name): return "hello {}".format(name) print(hello('Jack'))

 

四、用装饰器装饰类

1.用函数作为装饰器

def wrap_in_tag(deco_arg):    def real_decorator(func):        def wrapped(self, func_arg): # 类方法接收第一个参数都是self,这个必须有,而无论func_arg是否有!!!            return "<{0}>{1}
".format(deco_arg, func(func_arg)) return wrapped return real_decoratorclass foo(object): @wrap_in_tag('b') @wrap_in_tag('i') def hello(self, name): return 'hello {}".format(name) @wrap_in_tag('b') @wrap_in_tag('i') def byebye(self, name): return 'byebye {}".format(name) f = foo()print(f.hello('Jack')

    2.用类作为装饰器

class wrap_in_tag(object):    def __init__(self, deco_arg):        self.tag = deco_arg            def __call__(self, func):        def newf(slf, func_arg): # slf必须!self被占用了,那就给第一个参数另一个名字slf(随便)            return "<{0}>{1}
".format(self.tag, func(func_arg)) return newf class foo(object): @wrap_in_tag('b') @wrap_in_tag('i') def hello(self, name): return 'hello {}".format(name) @wrap_in_tag('b') @wrap_in_tag('i') def byebye(self, name): return 'byebye {}".format(name)
f = foo()print(f.hello('Jack'))
 

 

转载地址:http://lqdgo.baihongyu.com/

你可能感兴趣的文章
java 通过ssh 执行命令
查看>>
算法导论——基数排序(基于计数排序)
查看>>
19.TCP的交互数据流
查看>>
字符串匹配的Boyer-Moore算法
查看>>
memcached数据库未授权访问漏洞解决
查看>>
centos 7 安装在vmware Workstation的网卡问题 RHEL7
查看>>
嵌入式开发平台-iTOP-4418开发板
查看>>
我的友情链接
查看>>
ssh配置公钥私钥(key)登录SecureCRT
查看>>
go 字符串长度为空的判断 效率
查看>>
openstack安装(liberty)--安装认证服务(Identity service)
查看>>
邮件服务器软件为企业分支“搭桥”
查看>>
Windows Azure之VM的迁移之旅
查看>>
DevOps系列——Gogs和Jenkins的CI配置
查看>>
ExtJS4.2学习(php版)
查看>>
负载均衡——HAProxy
查看>>
win7 访问本机的虚拟机中centos的web项目
查看>>
批处理之播放文本文件
查看>>
windows server 2008活动目录的备份与还原
查看>>
spring boot 2.0.1.RELEASE hibernate 缓存 ehcache 详解
查看>>