在解释@函数装饰器之前,先说一下,类中的类方法和静态方法。

在Python中完全支持定义类方法、静态方法。这两种方法很相似,Python它们都使用类来调用(ps:用对象调用也可以)。

区别在于:Python会自动绑定类方法的第一个参数,类方法的第一个参数会自动绑定到类本身;但对于静态方法则不会自动绑定。

类方法用@classmethod修饰,静态方法用@staticmethod修饰,如下:

1 #coding=utf-8

2 classPerson:3 @classmethod4 defeat(cls):5 print("类方法eat:",cls)6

7 @staticmethod8 defsleep(p):9 print("静态方法sleep:",p)10

11

12 Person.eat()13 Person.sleep("info")14

15 p =Person()16

17 p.eat()18 p.sleep('info')

控制台打印如下:

解释:eat方法因为是@classmethod修饰所以它是类方法,所以第12行调用时,不用传入任何参数,即可以调用,因为它会自动绑定类本身到第一个参数。

sleep方法因为是@staticmethod修饰所以它是静态方法,所以在第13行调用时,需要传入参数。再看17、18行,可以得出结论:不管是用类或者对象调用静态方法,Python都不会对静态方法的第一个参数进行自动绑定。

上面的@classmethod 和 @staticmethod 其实就是函数装饰器,其中classmethod和staticmethod为Python中内置的函数。

使用@符号引用已有函数后,可用于修饰其他函数。

例如@函数A 装饰 函数B ,实际完成的步骤为:

1.将被装饰的函数B作为参数传给函数A

2.将函数B替换为第1步的返回值。

举个例子:

1 deffunA(fn):2 """参数为一个函数对象"""

3 print('A')4 fn() #执行传入的fn函数

5 return 'tizer'

6

7 '''

8 下面的代码相当于funA(funB)9 funB将会被替换为该语句的返回值10 由于funA返回tizer,因此funB就是tizer11 '''

12 @funA13 deffunB():14 print('B')15 print(funB)

先看运行结果:

解释:既然funB作为参数传给了funA,那就是得先执行funA中的代码,所以执行了print("A’),打印了A,然后执行第4行fn(),因为传入的funB,funB中的代码为print('B'),所以打印了B,然后funA 返回了一个字符串tizer,所以funB 等同于 tizer,第15行print(funB) 等同于 print('tizer'),所以打印了tizer。

python中的装饰器有哪些-Python中的@函数装饰器到底是什么?相关推荐

  1. Python 装饰器详解(中)

    Python 装饰器详解(中) 转自:https://blog.csdn.net/qq_27825451/article/details/84581272,博主仅对其中 demo 实现中不适合pyth ...

  2. python类装饰器详解-Python装饰器基础概念与用法详解

    本文实例讲述了Python装饰器基础概念与用法.分享给大家供大家参考,具体如下: 装饰器基础 前面快速介绍了装饰器的语法,在这里,我们将深入装饰器内部工作机制,更详细更系统地介绍装饰器的内容,并学习自 ...

  3. python装饰器详解-Python装饰器基础详解

    装饰器(decorator)是一种高级Python语法.装饰器可以对一个函数.方法或者类进行加工.在Python中,我们有多种方法对函数和类进行加工,比如在Python闭包中,我们见到函数对象作为某一 ...

  4. python装饰器详解-Python装饰器基础概念与用法详解

    本文实例讲述了Python装饰器基础概念与用法.分享给大家供大家参考,具体如下: 装饰器基础 前面快速介绍了装饰器的语法,在这里,我们将深入装饰器内部工作机制,更详细更系统地介绍装饰器的内容,并学习自 ...

  5. python中的装饰器有哪些-python 装饰器以及开发中常用的例子

    有时候我们想为多个函数,同意添加某一种功能,比如及时统计,记录日志,缓存运算结果等等,而又不想改变函数代码 那就定义装饰器函数,用它来生成一个在原函数基础添加了新功能的函数,代替原函数 参考金角大王的 ...

  6. python装饰器实例-基于Python 装饰器装饰类中的方法实例

    title: Python 装饰器装饰类中的方法 comments: true date: 2017-04-17 20:44:31 tags: ['Python', 'Decorate'] categ ...

  7. python类装饰器详解-Python类中的装饰器在当前类中的声明与调用详解

    我的Python环境:3.7 在Python类里声明一个装饰器,并在这个类里调用这个装饰器. 代码如下: class Test(): xx = False def __init__(self): pa ...

  8. python中的装饰器有哪些-python中的装饰器

    python的装饰器是用来装饰函数的.这是什么意思呢?假如我们有一个函数,这个函数的功能不能满足我们现有的需求,那么我们可以通过装饰器在这个函数执行前执行后做一些我们需要的操作(如果函数本身功能不满足 ...

  9. python类装饰器详解-python 中的装饰器详解

    装饰器 闭包 闭包简单的来说就是一个函数,在该函数内部再定义一个函数,并且这个内部函数用到了外部变量(即是外部函数的参数),最终这个函数返回内部函数的引用,这就是闭包. def decorator(p ...

最新文章

  1. backgroundworker 导致程序无法退出_macOS技巧—六种方法强制退出无响应的程序
  2. 挖洞技巧:信息泄露之总结
  3. 通过mvn dependency:tree 查看依赖树,解决依赖jar冲突问题
  4. VXWORKS 几种定时机制
  5. 用友元函数重载乘法,用成员函数重载除法
  6. 大数据日知录_腾讯T4专家精心整理:java+大数据+机器学习+数据挖掘+算法大集结...
  7. 017年美国大学生数学建模竞赛E题优秀论文解读
  8. python处理excel格式变化,分类,归类,行变列
  9. 用计算机美化演讲稿过程,计算机应用基础第10章--PowerPoint应用—制作论文答辩演讲稿.ppt...
  10. 查看服务器的外网IP
  11. Java多线程系列--“JUC锁”03之 公平锁(一) (r)
  12. 中国科技网宽带接入服务
  13. 17track包裹单个物流轨迹抓取(一)
  14. 巴黎大皇宫办秀,本土设计师品牌LANYU想在天猫做什么?
  15. grafana是什么?
  16. PS 滤镜——(扭曲)逆球面化 (凹陷效果)
  17. 《塞尔达传说-旷野之息》策划细节-爬山
  18. DOM事件里面的键盘事件
  19. 加州伯克利计算机科学录取,【哈鲁2019录取】恭喜哈鲁学员喜提加州伯克利大学计算机科学专业录取!...
  20. A_A02_001 CH340驱动安装

热门文章

  1. Python课堂:判定IP地址合法性的三种方法
  2. maven运行时的配置及命令详解
  3. python django -5 进阶
  4. 推理集 —— 物质与成分及性质的研究
  5. IOS开发 ARC forbids explicit message send of 'autorelease'错误解决办法
  6. 【IT笔试面试题整理】 二叉树任意两个节点间最大距离
  7. firefox4脚本执行顺序与jquery.globalEval
  8. ArrayList 解释
  9. 更改windows2003最大连接数的方法
  10. python之time和datetime的常用方法