购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.4 面向对象特性

2.4.1 类和对象

面向对象编程中,不得不提到的两个概念是类与对象。类是一个具有相同特征与行为的群体,类是抽象的,并不具体指向某一个个体。对象是类的具体化,指向具体的个体。对象是类的实例化,类是对象的抽象。如图2-19说明了类与对象的关系,人是对所有人类的抽象,“人”这个概念对应的是类,而下面的小朋友(如麦克、汤姆、露西与李华)对应的是对象。

图2-19 类与对象的关系

2.4.2 类的定义

描述一类事物既要说明其特征,又要指明其行为。例如,人类的特征包括姓名、年龄、身高、体重与肤色等,人类的行为包含了跑步与唱歌等。把特征与行为组合在一起就可以完整描述一类事物。该类事物对应的是类,该类事物的具体个体对应的是对象。

面向对象编程就是基于以上原则进行程序设计,把事物的特征与行为包含在类中。其中,类的属性对应的是事物的特征,类的方法对应的是事物的行为。对象是类的实例化,类是对象的抽象。创建一个对象,需要首先定义对应的类,而类由以下三部分组成。

(1)类名:类的名称,比如建立Person类。

(2)属性:用于描述事物的特征,比如人有姓名、年龄、身高、体重与肤色等特征。

(3)方法:用于描述事物的行为,比如人具有说话、跑步等行为。

在Python 3中,定义一个类的基本语法格式如下:

图2-20是一个类定义的示例代码。

图2-20 类的定义

在上面类中,使用关键字 class 定义了一个名称为 Person 的类,类中定义了一个属性 name,定义了一个方法 run()。该方法与函数定义方式基本相同,不同点在于该方法的第一个参数是self,self代表类的对象本身,可用来引用对象的属性与方法。

2.4.3 根据类创建对象

类代表抽象的事物,在使用时需要具体化,即对类进行实例化。在Python 3中,通过如下方式创建一个对象:

假如创建Person类的对象p,示例代码如下:

在上述代码中,p是一个对象,访问对象中的方法与属性,可通过如下方式:

例如,将p对象的name属性赋值为“张明”,代码如下:

下面通过一个完整例子来演示如何创建对象,以及给属性赋值并调用方法,代码如下:

运行结果如图2-21所示。

图2-21 创建对象

2.4.4 构造方法与析构方法

Python 3 程序中提供了两个非常特别的方法:__init__()与__del__()。这两个方法分别用于对象的初始化与对象的资源释放。

1.构造方法

构造方法主要作用是在创建对象时进行属性的初始化及资源的申请。对象中的属性包含两种:一种是特有的,同一类的每个对象的属性值都不相同;另一种是共有的,同一类的每个对象的属性值都相同。对于后一种情况,最好的方式是使用构造方法进行属性初始化,避免多次重复操作。

下面的代码中采用构造方法创建对象,在构造方法中添加属性并对属性赋值。值得注意的是,这里的构造方法除了self没有其他参数。

运行结果如图2-22所示。

图2-22 构造方法

2.析构方法

当创建对象后,Python 3 解释器默认会调用__init__()方法;当删除一个对象来释放类所占用资源时,Python 3解释器默认会调用__del__(self)。下面的示例代码演示析构方法的使用:

运行结果如图2-23所示。

图2-23 析构方法

在以上代码中,__del__()方法没有释放资源,而是改用了打印语句,这是为了方便读者能够看出在执行del命令后,调用了析构方法。Python 3的解释器存在垃圾自动回收机制,但也可以使用del命令手动删除对象。 M+q4VUGGtV+8bWwjA1dHdu0//3s+uuM9IWPxn65r8CWcKvqOaANrNpp6tS8yPZ9Z

点击中间区域
呼出菜单
上一章
目录
下一章
×