Python 面向对象
面向对象编程(OOP) 是一种解决软件复用的设计和编程方法。 这种方法把软件系统中相近相似的操作逻辑和操作 应用数据、状态,以类的型式描述出来,以对象实例的形式在软件系统中复用,以达到提高软件开发效率的作用。简单的说就是基于类和对象的使用。
面向对象
面向对象的三个特征:封装、继承、多态
封装
封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别。
- 封装数据: 为了保护隐私,明确区分内外数据,对外提供操作该数据的接口
- 封装方法: 目的是隔离复杂度
继承
在定义一个类的时候可以从当前有的类中进行继承。
python 允许多继承,并且在子类中拥有父类所有的成员变量和方法,为了缓解代码中的冗余,子类在父类的基础上增加的成员变量可以如下修改。
1 | class Person(object): |
多态
当子类继承父类之后,成员方法既可以重写也可以不重写。当调用的时候只要保证新方法编写正确,不用管原来的代码
- 对扩展开放(Open for extension):允许子类重写方法函数
- 对修改封闭(Closed for modification):不重写,直接继承父类方法函数
鸭子类型: 一些类含有相同的方法,则这些类就互称为鸭子
多继承
MixIn的目的就是给一个类增加多个功能,这样,在设计类的时候,我们优先考虑通过多重继承来组合多个MixIn的功能,而不是设计多层次的复杂的继承关系。
访问限制
private:私有变量以 __
开头,只有内部能够访问,可以给类增加 get、set 方法
特殊变量: __xxx__
, 可以直接访问
init 和 new 区别
1 | __init__是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值。 |
1 | 1. __init__ 方法为初始化方法, __new__方法才是真正的构造函数,创建实例。 |
self 和 cls 区别
self 是实例方法定义,cls 主要用在类方法定义。
一般来说,要使用某个类的方法,需要先实例化一个对象再调用方法。
而使用 @staticmethod 或 @classmethod,就可以不需要实例化,直接类名.方法名()来调用。
1 | class A(object): |
@staticmethod 和 @classmethod 都可以直接类名.方法名()来调用