面向对象编程: 一切皆对象
- OOP: OOP是面向对象编程,三大特征 : 封装、继承、多态。
- 抽象 : 将一个事物抽象定义成类,对这个事物详细的描述都定义为属性和方法, 事物的性质是属性, 事物的行为是方法,
一 . 封装:
- 将事物封装为类, 隐藏对象属性,方法实现的细节, 仅提供可供调用的接口 对对象的成员进行访问限制
- python中对访问权限的限制为: "_" 和 "__"
- 单下划线开头的变量也有private的意味,但是更多的只是个约定,可以直接访问到.
- 双下划线开头的类变量就用到了name mangling技术,会自动加上类名前缀.classname__属性名 的形式,只能在当前类或对象中访问,是私有的成员
二 . 继承:
- 基于对象,基于类的封装, 继承的类拥有和父类相同的属性和方法
- 作用:
- 减少代码,增加代码的复用功能, 同时可以设置类与类直接的关系.
- 子类可以调用父类的方法,也可以重写父类方法:
- 可以使用 [父类名.父类方法] 的格式来调用父类方法,也可以使用super().父类方法的 格式来调用
- super不是关键字, 而是一个类
- super的作用是获取MRO(MethodResolustionOrder)列表中的第一个类
- super于父类之间没任何实质性关系,但通过super可以调用到父类
- 菱形继承/钻石继承问题
- 多个子类继承自同一个父类,这些子类由被同一个类继承,于是继承关系图形成一个菱形图谱
多继承: 一个类可以继承自多个父类, 在被调用某个方法时, 首先在自己内部寻找, 如果没有, 再依次寻找父类中 的方法
(魔法属性__mro__可以查看调用的次序: python3 中为就近原则,广度优先, 每个父类只会访问一次)
三 . 多态:
- 同一个事物在不同的情况下有不同的形态:
- 小狗 属于动物 , 也属于狗类, 它继承子多个类, 具有多种形态
- python为动态语言, 多态体现一般
参考CSDN blog:对于OOP的详细说明