python-09 面向对象

python-09 面向对象

一、对象的基本概念

  “万物皆对象” Python中的所有事物都是以对象形式存在, 从简单的数值类型,到复杂的代码模块,都是对象。

  对象(object),既表示客观世界问题空间中的某个具体事物, 又表示软件系统解空间中的基本元素 。

  对象=属性+方法,对象以id作为标识,既包含数据(属性),也包含代码(方法),是某一类具体事物的特殊实例。

  对象是类的实例,是程序的基本单元;要创建一个新的对象,首先必须定义一个类, 用以指明该类型的对象所包含的内容(属性和方法)。同一类(class)的对象具有相同的属性和方法,但属性值和id不同。

对象的名称:

  赋值语句给予对象以名称,对象可以有多个名称(变量引用),但只有一个id;

  对象实现了属性和方法的封装,是 一种数据抽象机制,提高了软件的重用性、灵活性、扩展性。

Python语言动态的特征,使得对象可以随时增加或者删除属性或者方法。

二、 什么是类

  类(class)是对象的模版,封装了对应现实实体的性质和行为;实例对象(Instance Objects)是类的具体化 ;把类比作模具,对象则是用模具制造出来的零件。

  类的出现,为面向对象编程的三个最 重要的特性提供了实现的手段:封装性、继承性、多态性;

  和函数相似,类是一系列代码的封装;Python中约定,类名用大写字母开头,函数用小写字母开头,以便区分

1)类的初始化

1
2
3
class <类名>:     
def __init__(self, <参数表>):
def <方法名>(self, <参数表>):

init()是一个特殊的函数名,用于根据类的定义创建实例对象,第一个参数必须为self。

2)调用类

  使用点(.)操作符来调用对象里的方法。

3)实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Fruits:
def __init__(self,name,color):
self.name=name
self.color=color

def show(self):
print(self.name+': '+self.color)

def main():
a=Fruits(name='苹果',color='红色')
a.show()
a.weight=6 #对象可以增删属性
print(a.weight)


if __name__ == '__main__':
main()

#执行结果
苹果: 红色
6

三、类定义中的特殊方法

1、特殊方法(special￿method) 也被称作魔术方法(magic method)
  在类定义中实现一些特殊方法,可以方便地使用python中一些内置操作,所有特殊方法的名称以两个下划线(__)开始和结束。

2、构造与解构

1)对象构造器 init(self,[…) 对象的构造器,实例化对象时调用;

2)析构器 del(self,[…) 销毁对象时调用。

3)实例

1djFr8.png

3、算术运算

1)算术操作符

1
2
3
4
5
6
7
__add__(self,other):使用+操作符 

__sub__(self,other):使用-操作符

__mul__(self,other):使用*操作符

__div__(self,other):使用/操作符

2)反运算(当左操作数不支持相应的操作时被调用)

1
2
__radd__(self,other),__rsub__(self,other) 
__rmul__(self,other),__rdiv__(self,other)

3)大小比较

1
2
3
4
5
6
__eq__(self,other):使用==操作符
__ne__(self,other):使用!=操作符
__lt__(self,other):使用<操作符
__gt__(self,other):使用>操作符
__le__(self,other):使用<=操作符
__ge__(self,other):使用>=操作符

四、类的继承

1、类的继承机制

1)继承(inheritance)

  如果一个类别A继承自另一个类别B,就把继承者A称为子类,被继承的类B称为父类、 基类或超类;

2)代码复用

  利用继承可以从已有类中衍生出新的类,添加或修改部分功能;新类具有旧类中的各种属性和方法,而不需 要进行任何复制。

3)举例

  如下图中,class GasCar(Car),意思是子类GasCar继承自父类Car,父类即括号里的那个类。子类集成父类后,拥有父类的全部属性和函数,就不需要再复制一遍父类的代码了。子类中可以重定义fill_fuel函数,因为汽油车每升汽油能跑6英里,电动汽车每度电跑3英里,两个算法不同,因此两个子类中分别重定义了fill_fuel函数。

1w9qW4.png

2、子类与父类

  如果两个类具有 “一般-特殊” 的逻辑关系,那么特殊类就可以作为一般类的“子类” 来定义,从“父类”继承属性和方法。

1
2
class <子类名>(<父类名>):    
def <重定义方法>(self,…):

  覆盖(Override):子类对象可以调用父类方法,除非这个方法在子类中重新定义了;如果子类同名方法覆盖了父类的方法,仍然还可以调用父类的方法;子类还可以添加父类中没有的方法和属性。

3、关于self

  在类定义中,所有方法的首个参数一 般都是self。self的作用是在类内部,实例化过程中传入的所有数据都赋给这个变量。例如self.color=’red’,使得self储存了一个红色属性在自身上。

欢迎打赏,谢谢
------ 本文结束------
0%