此系列主要用于记录Python学习过程中查阅的优秀文章,均为索引方式。其中内容只针对本作者一人,作者熟悉了解的内容不再重复记录。
目录
属性(方法)查询入口:getattr, __getattr__, __getattribute__
描述符:__get__,__set__,__delete__
01-装饰器
装饰器的实现
Python进阶——如何实现一个装饰器? - 知乎 (zhihu.com)
1. [python高级编程]:01-数据结构-CSDN博客(闭包相关内容)
2. 装饰器其实就是先定义好一个闭包,然后使用语法糖
@
来装饰方法,最后达到重新定义方法的作用。也就是说,最终我们执行的,其实是另外一个被添加新功能的方法。
@overload -- 方法重载
【Python】Python中的@overload装饰器 - 知乎 (zhihu.com)
1. @overload装饰器其实只是一种注解/提示:该函数允许传入不同的参数类型组合。最终,所有加了@overload装饰器的方法都会被一个不加装饰器的方法覆盖掉。
@property -- 只读属性
properties - How does the @property decorator work in Python? - Stack Overflow
一文详述 Python 中的 property 语法 - 知乎 (zhihu.com)
1. 只读属性设置。
2. 类比JAVA中,私有属性的设置就是不想让数据被误取出来,增加一个方法去获取私有属性或者修改私有属性,那么就保证将来想获取属性的时候就获取,想修改的时候还可以进行过滤。
02-双下划线方法(魔法方法)
属性(方法)查询入口:getattr, __getattr__, __getattribute__
getattr, __getattr__, __getattribute__和__get__区别 - 知乎 (zhihu.com)
1.
getattr()
是python内置的一个函数,它可以用来获取对象的属性和方法。其主要实现形式便是在对应类中继承或重写"__getattribute__"和"__getattr__"方法。2. object类中包含"__getattribute__"方法,在重写时应注意super().__getattribute__()调用,否则会出现无限递归的问题。
3. 其中"__getattr__"方法主要用于访问未知属性、方法时设置默认值、初始化、阻止"AttributeError"异常等。
描述符:__get__,__set__,__delete__
Python进阶——什么是描述符? - 知乎 (zhihu.com)
python之 描述符(__get__,__set__,__delete__)-CSDN博客
1. 描述符的作用是用来代理另外一个类的属性的,可以使用描述符实现属性校验器功能。
03-多态
多态和鸭子类型
python中对多态的理解 - 知乎 (zhihu.com)
如何理解Python中的鸭子类型(duck typing)? - 知乎 (zhihu.com)
1. Java基础(多态的理解与应用)_java多态-CSDN博客
2. 多态 - 廖雪峰的官方网站 (liaoxuefeng.com)(Java多态)
3. 在面向对象方法中一般是这样表述多态性:向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为(即方法)。
4. python中变量的使用不用声明,所以不存在父类引用指向子类对象的多态体现,同时python不支持重载。
5. 鸭子类型在程序设计中是动态类型的一种风格。在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由"当前方法和属性的集合"决定。
04-设计模式
抽象基类和接口
【进阶Python】第七讲:接口与抽象基类-阿里云开发者社区 (aliyun.com)
1. 抽象类 - 廖雪峰的官方网站 (liaoxuefeng.com) (Java抽象类)
2. 接口 - 廖雪峰的官方网站 (liaoxuefeng.com) (Java接口)
3. Python可通过abc库实现抽象基类和接口,但并不支持纯接口实现,另鸭子类型也是一种设计模式。
05-方法/函数参数
参数传递:强制关键字方式传递
1. 第一个*号的作用为:在使用
self, *,
这种方式时,*
的作用是将self
参数之后的参数视为强制使用关键字方式传递,不能再使用位置参数。