python-09 面向对象
一、对象的基本概念
“万物皆对象” Python中的所有事物都是以对象形式存在, 从简单的数值类型,到复杂的代码模块,都是对象。
对象(object),既表示客观世界问题空间中的某个具体事物, 又表示软件系统解空间中的基本元素 。
对象=属性+方法,对象以id作为标识,既包含数据(属性),也包含代码(方法),是某一类具体事物的特殊实例。
对象是类的实例,是程序的基本单元;要创建一个新的对象,首先必须定义一个类, 用以指明该类型的对象所包含的内容(属性和方法)。同一类(class)的对象具有相同的属性和方法,但属性值和id不同。
对象的名称:
赋值语句给予对象以名称,对象可以有多个名称(变量引用),但只有一个id;
对象实现了属性和方法的封装,是 一种数据抽象机制,提高了软件的重用性、灵活性、扩展性。
Python语言动态的特征,使得对象可以随时增加或者删除属性或者方法。
二、 什么是类
类(class)是对象的模版,封装了对应现实实体的性质和行为;实例对象(Instance Objects)是类的具体化 ;把类比作模具,对象则是用模具制造出来的零件。
类的出现,为面向对象编程的三个最 重要的特性提供了实现的手段:封装性、继承性、多态性;
和函数相似,类是一系列代码的封装;Python中约定,类名用大写字母开头,函数用小写字母开头,以便区分。
1)类的初始化
1 | class <类名>: |
init()是一个特殊的函数名,用于根据类的定义创建实例对象,第一个参数必须为self。
2)调用类
使用点(.)操作符来调用对象里的方法。
3)实例
1 | class Fruits: |
三、类定义中的特殊方法
1、特殊方法(specialmethod) 也被称作魔术方法(magic method)
在类定义中实现一些特殊方法,可以方便地使用python中一些内置操作,所有特殊方法的名称以两个下划线(__)开始和结束。
2、构造与解构
1)对象构造器 init(self,[…) 对象的构造器,实例化对象时调用;
2)析构器 del(self,[…) 销毁对象时调用。
3)实例
3、算术运算
1)算术操作符
1 | __add__(self,other):使用+操作符 |
2)反运算(当左操作数不支持相应的操作时被调用)
1 | __radd__(self,other),__rsub__(self,other) |
3)大小比较
1 | __eq__(self,other):使用==操作符 |
四、类的继承
1、类的继承机制
1)继承(inheritance)
如果一个类别A继承自另一个类别B,就把继承者A称为子类,被继承的类B称为父类、 基类或超类;
2)代码复用
利用继承可以从已有类中衍生出新的类,添加或修改部分功能;新类具有旧类中的各种属性和方法,而不需 要进行任何复制。
3)举例
如下图中,class GasCar(Car),意思是子类GasCar继承自父类Car,父类即括号里的那个类。子类集成父类后,拥有父类的全部属性和函数,就不需要再复制一遍父类的代码了。子类中可以重定义fill_fuel函数,因为汽油车每升汽油能跑6英里,电动汽车每度电跑3英里,两个算法不同,因此两个子类中分别重定义了fill_fuel函数。
2、子类与父类
如果两个类具有 “一般-特殊” 的逻辑关系,那么特殊类就可以作为一般类的“子类” 来定义,从“父类”继承属性和方法。
1 | class <子类名>(<父类名>): |
覆盖(Override):子类对象可以调用父类方法,除非这个方法在子类中重新定义了;如果子类同名方法覆盖了父类的方法,仍然还可以调用父类的方法;子类还可以添加父类中没有的方法和属性。
3、关于self
在类定义中,所有方法的首个参数一 般都是self。self的作用是在类内部,实例化过程中传入的所有数据都赋给这个变量。例如self.color=’red’,使得self储存了一个红色属性在自身上。