一)基础概念
定义:面向对象是按照人们客观世界的系统思维方式,采用基于对象(实体)的概念建立模型 ,模拟客观世界分析,设计,实现软件的办法。通过面向对象的理念使计算机软件系统能与现实世界中的系统的一一对应。
特性: 抽象 封装 继承 多态
优点: 易维护 , 易复位,易扩展,由于面向对象有封装,继承,多态性的特性,可以设计出低耦合的系统,使系统更加灵活,更加易于 维护
缺点: 性能比面向过程低。
(二)对象和类
基本概念:
类(Class)是现实或思维世界中的实体在计算中的反映,它将数据以及这些数据上的操作封装在一起。
对象(Object ) 是具有类类型的变量。类和对象是面向对象编程技术中的最基本的概念。
类和对象的关系: 类是一个泛指的概念,对象是一个具体的示例。
类的定义: class 类() : pass
如何将类转换成对象:实例化是指在面向对象的编程中,把用类创建对象的过程称为实例化。是将一个抽象的概念类,具体到该类实物的过程。实例化过程中一般由 类名 对象名 = 类名 (参数1,参数2,…参数n)构成。
类是创建实例的模板
对象是一个个具体的实例
(三). 封装特性
1.定义:将内容封装到某个地方,以后再去调用被封装在某处的内容
所以在使用面向对象的封装特性时,需要:
1)将内容封装到某处
2) 从某处调用被封装的过程
**(1) 通过对象直接调用被封装的内容:对象.属性名
**(2)通过self间接调用被封装的内容:self.属性名
**(3)通过self 间接调用被封装的内容:self.方法名()
2.构造方法
_ init_ 与其他的构造方法相比的不同之处在于,在一个对象被创建后,会立即调用构造方法。
3.封装特性。
对于面向对象的封装来说,其实就是使用构造方法将内容封装到对象中,然后通过对象直接或者self间接获取被封装的内容
eg. 创建一个类people 拥有属性姓名,年龄和性别。拥有的方法分别为购物,玩游戏和学习,实例化对象,执行相应的方法。
小明 18岁 , 男 , 去购物
小王 22岁 , 男, 玩游戏
小红 10岁 , 女 , 正在学习
代码如下:
运行结果为:
四) .继承特性
定义:继承描述的是事物之间的所属关系,当我们定义一个class的时候,可以从某个现有的class 继承,新的class称为子类,扩展类(subclass),而被继承的class称为基类,父类或者超类。
子类的继承方法:
子类在继承的时候,在定义类的时候,小括号() 中为父类名字。
继承的工作机制:弗雷德属性方法会继承给子类。如果子类没有定义 _ init_ 方法,而父类有,那么在子类继承父类的时候这个方法就被继承,所以,只要创建对象,就默认执行了那个继承过来的 _ init_ 方法。
重写父类方法:在子类中,有一个和父类名字相同的方法,在子类的方法中会覆盖掉父类同名的方法
调用父类的方法:
1)父类名.父类的方法名()
super(): --在python2.2以上的版本能够使用
多继承
1)多继承定义:子类有多个父类,并且具有他们的父类
2)新式类和经典类
在python2 及以前的版本中,由任意内置类型派生出的类,都是属于”新式类“
反之,不由任意内置类型派生出的类,则称为 “经典类 ” 。
新式类和经典类的区别:
最明显的是多继承的搜索顺序不同
经典多继承搜索顺序(深度优先搜索),先深入继承树的左侧查找,然后再返回,开始在右侧查找。
新式类多继承搜索顺序(广度优先算法),先在水平方向查找,再向上查找
私有属和私有方法
私有属性: 只能在类的内部访问
私有方法: 外部无法调用的方法
表示方法:加 双下划线
优势: 确保了外部的代码不能随意修改对象内部的状态,这样通过访问限制的保护,使得代码更加健壮。
Q: 如果又要允许外部的代码修改属性怎么办?
A:可以给类增加专门设置属性的方法,
Q:为什么要这么麻烦,即设置为私有,又要允许外部修改?
A : 因为在方法中,可以对参数做检查,避免传入无效的参数。
(五) 多态特性
定义:多态,字面意思是 ”多种状态“ ,在面向对象语言中,接口的多种不同的实现方式即为多态。也就是说,同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。
多态的好处:
当我们传入更多的子类,只要继承父类就可以了,而方法既可以直接不重写(使用父类的),也可以重写一个特有的,这就是多态。
在调用的时候,只要调用就行,不用管原来的代码,这就是 “ 开闭 ” 原则。
即 对扩展开放(Open for extension ):允许子类重写方法函数
对修改封闭(Closed for modification ):不重写,直接继承父类方法函数