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

3.2 面向对象编程

Python是一门面向对象的编程语言,甚至可以说Python中对象是随处可见的。所以学习如何面向对象编程是相当重要的环节。接下来,本节将会介绍面向对象编程的思想及其相关的内容。

3.2.1 类与实例

要想了解类与实例,需要先了解如何去描述一个对象。拿平常的物品来举例,例如要描述一把伞,该如何形容呢?一般首先会介绍它的外观、长短和颜色等,然后介绍它的作用,如可以用来挡雨和遮阳等。类也是如此,需要描述它们的外观,也就是类的属性;也要描述它们的作用,也就是类的方法。拿雨伞定义类举例,具体如下。

把上面的伪代码换成具体的代码如下。

程序清单3-46 类的示例

上面这段代码,便是对雨伞这个类的定义。其中函数“use(self)”中的“self”类似于C++中的this,即代表自身,也就是类Umbrella。

1.类与实例

在明白类的基本概念后,进一步介绍实例。什么是实例呢?用雨伞的例子来说明,刚才形容的是黑色的、短的遮雨伞这一类,但是现在的实例则是要具体到一把伞,相当于去买伞,然后在上面刻了一个自己的名字。示例代码如下。

程序清单3-47 类与实例1

既然已经是自己的伞,那么自己当然可以对它做一些改变。实例也是这样,可以修改其中的内容,也就是说实例可以覆盖类中的内容。例如,把上面的黑色伞换成蓝色,可以在上面的代码中修改一些内容,示例代码如下。

程序清单3-48 类与实例2

可以看到上面的实例myUmbrella的属性中color已经修改成功了。

2.公有与私有

不同于C++和Java中的类有public和private的区分,Python中属性和方法默认都是public的。这里可能有些新学的读者不太清楚什么是public和private,下面简单介绍一下。在C++和Java中,用public和private来划分公有和私有的属性和方法,即public的属性和方法在实例创建后就能直接使用“.”来调用,而private则不行,这样可以增加安全性,调用的时候也会更简洁。但是在Python中就没有public和private了,属性和方法都可以直接调用。不过并不意味着不能设置private,在Python中可以在属性名或方法名前面加入“__”来使属性和方法变为private。示例代码如下。

程序清单3-49 公有与私有1

从上面的例子可以看出,属性color和方法use()已经设置为private,在实例化之后无法直接查看或调用它们。但是可以定义public的方法来查看它们,示例代码如下。

程序清单3-50 公有与私有2

上述例子中通过定义public方法getColor()来查看private属性color。

3.__init__()和__del__()方法

Python的类中有许多内置的方法,而__init__()方法便是其中的一个。它会在类实例化时优先调用,类似于C++中的构造函数。通俗地说,就是对实例进行一个初始化。而__del__()则是类似于析构函数,即在对象生命周期结束被销毁时,会调用__del__()。示例代码如下。

程序清单3-51__init__()和__del__()方法

3.2.2 继承和多态

1.继承

继承是类与类之间的关系,被继承的类称为父类,继承的类称为子类。继续拿雨伞举例子,如果想把刚才所说的伞更加具体化,而不仅仅描述为黑色、短的、遮雨的伞,那么就需要对其进行更加详细的分类。例如,Ⅰ类伞是黑色斑点、短的遮雨伞;Ⅱ类是黑色、可加长的短的遮雨伞。这便由原本的父类Umbrella衍生出了两个子类Ⅰ类伞和Ⅱ类伞。示例代码如下。

程序清单3-52 继承

可以看到子类UmbrellaⅠ和UmbrellaⅡ都继承了父类Umbrella的color和length。同时也有了自身的style或adjustable。

2.多重继承

Python支持多重继承,即一个子类可以继承多个父类。

3.多态

在继承中子类可以继承父类的属性和方法,但是能否更改一些属性或方法呢?答案是肯定的,这便是多态。示例代码如下。

程序清单3-53 多态

可以看到子类Umbrella Ⅲ中的use()方法改为了输出“Block sunlight”。使用多态的好处是,可以为子类写特殊独有的属性和方法,方便使用。 xri0b83q2QSq+5jWpFNDeZd0eXpj/zPYOqmlL7PMkEzDLwYSfBQx3+O88wj9hoh7

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