测开之函数进阶· 第 8 篇《多个装饰器装饰同一个函数,三个内置的装饰器》

坚持原创输出,点击蓝字关注我吧
作者:清菡
博客:oschina、云+社区、知乎等各大平台都有。
由于微信公众号推送改为了信息流的形式,防止走丢,请给加个星标 ⭐,你就可以第一时间接收到本公众号的推送!
目录
一、多个装饰器装饰同一个函数
二、Python 中类里面三个内置的装饰器
- 1.@classmethod
- 2.@staticmethod
- 3.@property
三、3 个内置装饰器的演示代码
一、多个装饰器装饰同一个函数
装饰的时候是从下往上装饰,从上往下执行。 运行的时候是:1.先运行@login_check,2.运行@wrapper,3.再运行time.sleep(3)。
二、Python 中类里面三个内置的装饰器
这个三个内置的装饰器是在类里面用的。
1.@classmethod
被classmethod装饰了之后,该方法就是一个类方法。
self出现了下划波浪线,说明它不符合 pep8 规范。
被装饰之后它是一个类方法,那么这个时候self不会代表实例本身,不是实例对象了。那么这个参数改成cls。
类方法的第一个参数是cls,代表的是类本身。self 代表的是实例本身。
用类不能调用实例的方法:
被 classmethod 装饰了之后,类就能直接调用了:
被classmethod 装饰之前:实例方法、实例属性,类都是调用不了的。
2.@staticmethod
静态方法,默认不需要传参数(不会传类也不会传实例对象),实例和类都可以调用。
3.@property
这个一般用来做设置只读属性的。
通过__init__设置的属性,在外面可以读也可以改。
比如给实例设置个属性,这个属性只能读,不能改。那这个属性就设置在@property里面。
这个是不能改的,改了以后运行会报错:
要设置可读属性的话,通过这种方式,实际上设置的是个方法,方法内部返回的是个值。
这个值,就可以把它看成一个只读属性。这个只能读不能改,哈哈哈。
三、3 个内置装饰器的演示代码
-----------------------------
公众号清菡软件测试首发,更多原创文章:清菡软件测试 117+原创文章,欢迎关注、交流,禁止第三方擅自转载。
版权声明: 本文为 InfoQ 作者【清菡】的原创文章。
原文链接:【http://xie.infoq.cn/article/82255fc0d336cd852b0e65373】。文章转载请联系作者。











评论