本文实例讲述了Python装饰器用法。分享给大家供大家参考,具体如下:

用类作为装饰器
示例一
最初代码:
class bol(object):
def __init__(self, func):
self.func = func
def __call__(self):
return "<b>{}</b>".format(self.func())
class ita(object):
def __init__(self, func):
self.func = func
def __call__(self):
return "<i>{}</i>".format(self.func())
@bol
@ita
def sayhi():
return 'hi'
改进一:
class sty(object):
def __init__(self, tag):
self.tag = tag
def __call__(self, f):
def wraper():
return "<{tag}>{res}</{tag}>".format(res=f(), tag=self.tag)
return wraper
@sty('b')
@sty('i')
def sayhi():
return 'hi'
改进二:
class sty(object):
def __init__(self, *tags):
self.tags = tags
def __call__(self, f):
def wraper():
n = len(self.tags)
return "{0}{1}{2}".format(('<{}>'*n).format(*self.tags), f(), ('</{}>'*n).format(*reversed(self.tags)))
return wraper
@sty('b', 'i')
def sayhi():
return 'hi'
print(sayhi())
改进三:
class sty(object):
def __init__(self, *tags):
self.tags = tags
def __call__(self, f):
def wraper(*args, **kwargs):
n = len(self.tags)
return "{0}{1}{2}".format(('<{}>'*n).format(*self.tags), f(*args, **kwargs), ('</{}>'*n).format(*reversed(self.tags)))
return wraper
@sty('b', 'i')
def say(word='Hi'):
return word
print(say())
print(say('Hello'))
示例二
最初代码:
import threading
import time
class DecoratorClass(object):
def __init__(self):
self.thread = None
def __call__(self, func, *args, **kwargs):
def wrapped_func(*args, **kwargs):
curr_thread = threading.currentThread().getName()
self.thread = curr_thread
print('\nthread name before running func:', self.thread)
ret_val = func()
print('\nthread name after running func:', self.thread)
return ret_val
return wrapped_func
@DecoratorClass()
def decorated_with_class():
print('running decorated w class')
time.sleep(1)
return
threads = []
for i in range(5):
t = threading.Thread(target=decorated_with_class)
threads.append(t)
t.setDaemon(True) # 守护
t.start()
改进:进程锁
import threading
import time
class DecoratorClass(object):
def __init__(self):
self.thread = None
self.lock = threading.Lock()
def __call__(self, func, *args, **kwargs):
def wrapped_func(*args, **kwargs):
self.lock.acquire()
curr_thread = threading.currentThread().getName()
self.thread = curr_thread
print('thread name before running func:', self.thread)
ret_val = func()
print('\nthread name after running func:', self.thread)
self.lock.release()
return ret_val
return wrapped_func
@DecoratorClass()
def decorated_with_class():
print('Let me sleep 1 second...')
time.sleep(1)
return
threads = []
for i in range(5):
t = threading.Thread(target=decorated_with_class)
threads.append(t)
t.start()
更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。
# Python
# 装饰器
# Python 装饰器使用详解
# 老生常谈Python之装饰器、迭代器和生成器
# Python中装饰器兼容加括号和不加括号的写法详解
# Python的装饰器使用详解
# 带你了解python装饰器
# 详解Python中最难理解的点-装饰器
# 深入理解Python中装饰器的用法
# 详解 Python中LEGB和闭包及装饰器
# 进阶
# 最初
# 相关内容
# 数据结构
# 给大家
# 更多关于
# 所述
# 程序设计
# 使用技巧
# 操作技巧
# 编程技巧
# 讲述了
# return
# lt
# gt
# def
# func
# format
# wraper
# res
相关文章:
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
武清网站制作公司,天津武清个人营业执照注销查询系统网站?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
如何通过西部数码建站助手快速创建专业网站?
个人摄影网站制作流程,摄影爱好者都去什么网站?
建站之星各版本价格是多少?
如何在阿里云高效完成企业建站全流程?
如何用免费手机建站系统零基础打造专业网站?
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
如何用搬瓦工VPS快速搭建个人网站?
如何通过虚拟主机快速完成网站搭建?
如何在万网开始建站?分步指南解析
建站VPS推荐:2025年高性能服务器配置指南
济南专业网站制作公司,济南信息工程学校怎么样?
如何正确选择百度移动适配建站域名?
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
c++ stringstream用法详解_c++字符串与数字转换利器
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
建站之星在线版空间:自助建站+智能模板一键生成方案
如何在万网自助建站中设置域名及备案?
如何零基础在云服务器搭建WordPress站点?
哈尔滨网站建设策划,哈尔滨电工证查询网站?
如何在局域网内绑定自建网站域名?
如何用VPS主机快速搭建个人网站?
,制作一个手机app网站要多少钱?
教程网站设计制作软件,怎么创建自己的一个网站?
如何通过老薛主机一键快速建站?
建站主机是否等同于虚拟主机?
如何有效防御Web建站篡改攻击?
建站主机选购指南:核心配置优化与品牌推荐方案
如何在Windows环境下新建FTP站点并设置权限?
建站之星后台密码遗忘如何找回?
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
制作营销网站公司,淘特是干什么用的?
如何在万网主机上快速搭建网站?
建站之星图片链接生成指南:自助建站与智能设计教程
盐城做公司网站,江苏电子版退休证办理流程?
台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
ppt制作免费网站有哪些,ppt模板免费下载网站?
如何快速搭建安全的FTP站点?
微课制作网站有哪些,微课网怎么进?
linux top下的 minerd 木马清除方法
C#怎么创建控制台应用 C# Console App项目创建方法
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
家庭服务器如何搭建个人网站?
已有域名如何快速搭建专属网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。