装饰器带类参数 & 一个函数应用多个装饰器
装饰器:不改变原函数的基础上,给函数增加功能的方式,称为装饰器
即:为已经存在的对象添加额外的功能
装饰器其实就是一个闭包,把一个函数当做参数后返回一个替代版的函数 decos.py:
(装饰器的参数类)代码如下:
class Locker1:
def __init__(self):
print('locker1...') @staticmethod
def acquire():
print('locker1 acquire...') @staticmethod
def unlock():
print('locker1 unlock...') class Locker2(Locker1):
@staticmethod
def acquire():
print('locker2 acquire...') @staticmethod
def unlock():
print('locker2 unlock...')
装饰器函数 和 主程序:
# 装饰器函数: def locker_deco(cls):
def _deco(func):
def __deco(*args,**kwargs):
print('before...')
print(func.__name__)
cls.acquire()
try:
return func(*args,**kwargs)
finally:
cls.unlock()
print('after...')
return __deco
return _deco # 主程序: from decos import Locker1,Locker2 class Example:
@locker_deco(Locker1)
def func1(self):
print('func1...')
return 5 @locker_deco(Locker1)
@locker_deco(Locker2)
def func2(self,a,b):
print('func2...')
return a+b e=Example()
e.func2(1,2)
print('****')
print(e.func2(1,2))
运行结果:
before...
__deco
locker1 acquire...
before...
func2
locker2 acquire...
func2...
locker2 unlock...
locker1 unlock...
****
before...
__deco
locker1 acquire...
before...
func2
locker2 acquire...
func2...
locker2 unlock...
locker1 unlock...
3
装饰器带类参数 & 一个函数应用多个装饰器的更多相关文章
- 【c++】类中带默认参数的函数
		反思两个问题 1. 带默认参数的函数,为何声明.定义不能同时有参数? 2. 带默认参数的函数, 为何带默认参数的参数靠后站? 上程序 #include <iostream> #includ ... 
- python 装饰器--对有无参数的函数进行装饰
		# 使用装饰器无参数的函数进行装饰# def func(funcionName): # print('-----1------') # def func_in(): # print('--func_i ... 
- C/C++中带可变参数的函数
		1.带可变参数的函数由来 当函数中的参数个数不确定时,这时候就需要带可变参数的函数! 如我们经常使用的C库函数printf()实际就是一个可变参数的函数, 其原型为: int printf( cons ... 
- python四个带 key 参数的函数(max、min、map、filter)
		四个带 key 参数的函数: max()点击查看详细 min()点击查看详细 map()点击查看详细 filter()点击查看详细 1)max(iterable, key) key:相当于对可迭代对象 ... 
- php课程 3-12 带默认参数的函数怎么写
		php课程 3-12 带默认参数的函数怎么写 一.总结 一句话总结:多看学习视频啊 1.带默认参数的函数怎么写? 直接等于号接默认参数,和js里面一模一样 2.带默认参数的函数的注意事项是什么? 默认 ... 
- js课程 2-7 带默认参数的函数怎么写
		js课程 2-7 带默认参数的函数怎么写(注意参数顺序) 一.总结 一句话总结:默认参数一定要放在最后面,而且还有注意你调用参数的时候给参数的顺序习惯.直接加个等于号就可以是默认参数.function ... 
- Python练习笔记——编写一个装饰器,测算出一个函数的运行时间
		import time def time_value(dec): def wrapper(*args,**kwargs): start_time = time.time() get_str = dec ... 
- 大半宿,封装了一个MP3播放器的类,写了个简陋的播放器
		用 winmm.lib 写的 封装不是很好,而且没有优化,效率可能有问题,但是现在几乎没有什么大问题 我用我封装的类,写了一个小播放器,界面上的所有功能都实现了,包括双击列表中的文件名,直接播放文件 ... 
- python 定义带默认参数的函数
随机推荐
- #C++初学记录(ACM8-6-cf-f题)
			F. Vanya and Label While walking down the street Vanya saw a label "Hide&Seek". Becaus ... 
- ActionFilter、IAuthorizationFilter 权限验证重定向跳转到其它页面
			方法一: public class IsAllowAttribute: ActionFilterAttribute { public override void OnActionExecuting(A ... 
- Calcite分析 - Rule
			Calcite源码分析,参考: http://matt33.com/2019/03/07/apache-calcite-process-flow/ https://matt33.com/2019/03 ... 
- Nginx可以做什么?(转载)
			本文只针对Nginx在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,毕竟只是我个人使用过和了解到过得,欢迎留言交流. Nginx能做什么 —— ... 
- [转]使用 curl 发送 POST 请求的几种方式
			HTTP 的 POST 请求通常是用于提交数据,可以通过这篇文章来了解各种提交方式:四种常见的 POST 提交数据方式.做 Web 后端开发时,不可避免地要自己给自己发请求来调试接口,这里要记录的内容 ... 
- [LeetCode] 256. Paint House 粉刷房子
			There are a row of n houses, each house can be painted with one of the three colors: red, blue or gr ... 
- [LeetCode] 507. Perfect Number 完美数字
			We define the Perfect Number is a positive integer that is equal to the sum of all its positive divi ... 
- MySQL之表关系
			MySQL表关系 一对多关系 一对多与多对一是一个概念,指的是一个实体的某个数据与另外一个实体的多个数据有关联关系. 举例,学校中一个学.院可以有很多的学生,而一个学生只属于某一个学院(通常情况下), ... 
- UE4 window打包ios备忘
			1.生成SHH key 2.安装证书 *.cer,*.p12 以下转自:http://wangjie.rocks/2017/11/30/ue4-ios-build-on-windows/ 问题一 12 ... 
- mac自带ssh在哪
			打开Finder,前往> 前往文件夹,输入 ~/.ssh 回车就到ssh目录了. 点击Mac顶部菜单-->“苹果”图标-->最近使用的项目-->终端--输入 open ~/.s ... 
