目标
- 温故面向对象三大特性
- Python的私有是真的吗?
- Python的多继承是什么?
- 了解下魔方方法
第一部分 魔法方法
相信我们初学者都会有个疑问,下边的意思是啥??为啥要写这个?
反正我是先忽略这个问题,打算在学的过程中慢慢明白😆
if __name__ == '__main__' : |
知乎的回答:__name__
是当前模块名,当模块被直接运行时模块名为 __main__
。这句话的意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行。
还有很多类似的,比如:
__init__ : 构造函数,在生成对象时调用 |
使用实例,比如:
'ABC') len( |
等用到了,再看下 😆
第二部分 封装继承多态
封装
封装:将内部实现包裹起来,对外透明,提供api接口进行调用的机制
优点
1. 将变化隔离; |
原则
1. 将不需要对外提供的内容都隐藏起来; |
继承
即一个派生类(derived class)继承父类(base class)的变量和方法。
多态:根据对象类型的不同以不同的方式进行处理。
前提:①类的继承关系 ②要有方法重写。
父类替换子类: super(子类名, self).方法名()
以上概念将通过以下几个实例来说明:
实例一 基本、继承
首先试着下边的三个问题与代码的结果
1. Python的私有方法真的私有吗? |
# 定义基类 |
其实也不难
结果
性别:1 年龄:100 |
实例二 多继承
该部分摘录自Python的方法解析顺序(MRO)
先思考几个问题:
- 多继承顺序的规则是什么?
- Python中MRO的三种方式是什么?
# 模块inspect:检查运行模块的一些基本信息 |
按照深度遍历,其顺序为 [D, B, A, object, C, A, object],重复类只保留最后一个,因此变为 [D, B, C, A, object]。
结果是
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>) |
Python 至少有三种不同的 MRO:
1. 经典类(classic class)的深度遍历。 |
- 经典类
经典类的遍历顺序为: 从左至右的深度优先遍历。以上述「菱形继承」为例,其查找顺序为 [D, B, A, C, A],如果只保留重复类的第一个则结果为 [D, B, A, C]
2.2 新式类的执行结果
如上例子所示
,但其中有问题,C3 现在Python采用的方式
# 例子 |
L[object] = [object] |
说实在的没看懂
最近没更新,是在找学数学方面的资源,
很开心,正在学
实例三 多态
这个似乎很好理解
class Animal: |
实例四 super
如果想让父类替换子类,那么既可以用super()
class A: |
参考链接