文章目录
第十七节课讲了一个notes,内容是Levenshtein Distance,没怎么听,目测不会考,就不写了。
这是最后一节课笔记,内容是装饰器。
Decorators - 装饰器
基础篇
- 特殊函数:call
在自定义的这个类里重载这个特殊函数Call之后,一个类就变成一个特殊函数了。
当然使用之前必须像【5】一样先赋给一个变量。

- 加一个初始化
把一个函数作为这个类的初始化参数,这样可以配合call函数输出结果。

入门篇
- 装饰器符号 @
加了这个@就让add这个函数直接成了class C的内部函数。
调用add的时候相当于通过调用class C的Call函数来调用的add。
省去了把class赋给一个变量的步骤,但效果是一样的。
- 函数参数中有默认参数的例子
正常使用

call函数中加一个星号

call函数加一个星号把前面的参数打包

call函数加两个星号将默认函数打包
传进去的默认参数竟然是字典。

还可以像下面这样直接通过类名调用。
注意:把类赋给变量之后,里面的内容是保存了的。
直接像红框中那样调用类是每次都初始化了一个对象,输出完就没了。

- 函数参数中有默认参数的例子
高级篇
- 装饰器是一个函数
前面的都是一个类装饰一个函数,这里是函数装饰函数。
如下图,传进去cout_calls的参数是函数add_up这个对象,add_up的参数实际上是写在后面穿进函数count_calls的。具体是怎么实现这种操作的,我也不懂,懒得查了,有明白的同学在下面回复下呗。
注意,这里只有在@count_calls那儿初始化了,后面那个注释只是举例。。所以还是有一点点不一样。

- 调用嵌套函数里的函数
emmm, 看注释吧,几个字说不清楚。
未来某天的自己:wq,不要这么懒行不行。

- 函数装饰类

python内置修饰符
官方文档:所有内置函数,高亮的是decorator
其他文档:Chapter 25, decorators
静态方法 - @staticmethod
正常来说一个类方法第一个参数有个self,但是这次咱们没有加self,通过类名C可以直接调用。
那么一个实例想要调用这些方法需要加上@staticmethod这个修饰符,否则会报错。

有人说我加上self不就行了么,我试试


对比发现,如果加上self,就不能通过类名调用函数了,必须先实例一个对象,通过对象调用。
类方法 - @classmethod
参考资料:@staticmethod
classmethod 修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等。

解释器 - Descriptor
官方文档:Descriptor
老师的notes:
内容如图。注意用del删除属性之后就没有这个属性了

小练习
一切正常。

@property
官方文档:@property
该说的老师都说了, 就是用了property这个修饰符之后,下面的那个函数datum就变成了一个解释器,且带有内建函数 getter, setter and deleter等等。。看例子,挺好理解的。

不想看,就不会考


本文深入讲解Python装饰器的基础、入门及高级用法,包括特殊函数call的重载、@符号的使用、函数作为参数传递等内容,并探讨静态方法、类方法等修饰符的应用。


4988

被折叠的 条评论
为什么被折叠?



