python类装饰器详解-Python 类装饰器解析
1. 类装饰器(都不带参数)
class ClassDeco:
def __init__(self, func):
self.func = func
def __call__(self, *args, **kwargs):
print(f'Running {self.func.__name__}')
self.func()
print(f'End {self.func.__name__}')
@ClassDeco # 等价于 foo = ClassDeco(foo)
def foo():
print('do something')
# call foo()
# OUT:
# Running foo
# do something
# End foo
2. 类装饰器带参数
class ClassDeco:
def __init__(self, x, y):
self.x = x
self.y = y
def __call__(self, func, *args, **kwargs):
print(f'Running {func.__name__}')
print(f'Using x + y = {self.x + self.y}')
return func
@ClassDeco(1, 2) # 等价于 foo = ClassDeco(1, 2)(foo)
def foo():
print('do something')
# call foo()
# OUT:
# Running bar1
# Using x + y = 3
# do something
3. 类装饰器不带参数,被包装对象带参数
class ClassDeco:
def __init__(self, func):
self.func = func
def __call__(self, *args, **kwargs):
print(f'Running {self.func.__name__}')
self.func(*args, **kwargs)
print(f'End {self.func.__name__}')
@ClassDeco # 等价于foo = ClassDeco(foo)
def foo(a, b):
print('do something')
print(f'return a + b = {a + b}')
# foo(1, 2)
# OUT:
# Running foo
# do something
# return a + b = 3
# End foo
4. 类装饰器带参数且被装饰对象也带参数
from functools import wraps
class ClassDeco:
def __init__(self, x, y):
self.x = x
self.y = y
def __call__(self, func, *args, **kwargs):
print(f'Using x + y = {self.x + self.y}')
@wraps(func)
def wrapper(*args, **kwargs):
func(*args, **kwargs)
print(f'Ending {func.__name__}')
return wrapper
@ClassDeco(1, 2) # 等价于 foo = ClassDeco(1, 2)(foo)
def foo(a, b):
print('do something')
print(f'return a + b = {a + b}')
# call foo(3, 4)
# OUT:
# Using x + y = 3
# do something
# return a + b = 7
# Ending foo
if __name__ == '__main__':
foo(3, 4)
5. 参考
python类装饰器详解-Python 类装饰器解析相关推荐
- 机器学习:基于概率的朴素贝叶斯分类器详解--Python实现以及项目实战
前言 前篇基础理论知识:机器学习:贝叶斯分类器详解(一)-贝叶斯决策理论与朴素贝叶斯 这篇主要使用代码实现贝叶斯分类. 一.准备数据 创建一个bayes.py程序,从文本中构建词向量,实现词表向向量转 ...
- python归一化处理_详解python实现数据归一化处理的方式:(0,1)标准化
在机器学习过程中,对数据的处理过程中,常常需要对数据进行归一化处理,下面介绍(0, 1)标准化的方式,简单的说,其功能就是将预处理的数据的数值范围按一定关系"压缩"到(0,1)的范 ...
- python namedtuple用法_详解Python中namedtuple的使用
namedtuple是Python中存储数据类型,比较常见的数据类型还有有list和tuple数据类型.相比于list,tuple中的元素不可修改,在映射中可以当键使用. namedtuple: na ...
- python gil 解除_详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
先看一道GIL面试题: 描述Python GIL的概念, 以及它对python多线程的影响?编写一个多线程抓取网页的程序,并阐明多线程抓取程序是否可比单线程性能有提升,并解释原因. GIL:又叫全局解 ...
- python列表拆包_详解python 拆包可迭代数据如tuple, list
详解python 拆包可迭代数据如tuple, list 拆包是指将一个结构中的数据拆分为多个单独变量中. 以元组为例: >>> a = ('windows', 10, 25.1, ...
- python 减法函数_详解 Python 的二元算术运算,为什么说减法只是语法糖?
大家对我解读属性访问的博客文章反应热烈,这启发了我再写一篇关于 Python 有多少语法实际上只是语法糖的文章.在本文中,我想谈谈二元算术运算. 具体来说,我想解读减法的工作原理:a - b.我故意选 ...
- python操作目录_详解python中的文件与目录操作
详解python中的文件与目录操作 一 获得当前路径 1.代码1 >>>import os >>>print('Current directory is ',os. ...
- python如何安装matplotlib_详解python安装matplotlib库三种失败情况
(可能只有最后一句命令有用,可能全篇都没用) (小白方法,可能只适用于本人情况) 安装matplotlib时,出现的三种失败情况 1.read timed out 一开始我在pycharm终端使用pi ...
- python模式匹配算法_详解Python 最短匹配模式
问题 你正在试着用正则表达式匹配某个文本模式,但是它找到的是模式的最长可能匹配. 而你想修改它变成查找最短的可能匹配. 解决方案 这个问题一般出现在需要匹配一对分隔符之间的文本的时候(比如引号包含的字 ...
- python opencv 直方图均衡_详解python OpenCV学习笔记之直方图均衡化
本文介绍了python OpenCV学习笔记之直方图均衡化,分享给大家,具体如下: 官方文档 – https://docs.opencv.org/3.4.0/d5/daf/tutorial_py_hi ...
最新文章
- H5用户地址位置选择地点获取经纬度(效果图)
- Kubernetes删除一直处于Terminating状态的namespace
- session 存放对象变量,及遇到的奇怪现象
- php unable to save,php – Laravel save()未定义
- NLP基础:n-gram语言模型和神经网络语言模型
- 五个常用的Linux监控脚本代码
- CNN框架的搭建及各个参数的调节
- mysql sql 片段_MySQL代码片段
- 可能存在无限递归_你为什么学不会递归?读完这篇文章轻松理解递归算法
- [编程手记小技巧]自定义调试信息宏及gcc技巧
- 做好准备,让你的短信应用迎接Android 4.4(KitKat)
- Linux系统TTY串口驱动实例详解
- python | prophet的案例实践:趋势检验、突变点检验等
- 支付宝小程序: h5跳转 小程序
- php guzzle 上传文件,Guzzle 使用文档
- 怎样从旧版本激活TeamViewer新版本界面?
- Linux操作系统安全(一)
- uml各类图--完整全面实例
- 理想照进现实:大量AI项目未见收益,产业方渐归冷静
- c++ promer和c++ primer Pluse下载