ad

《Python学习笔记 从入门到实战》_更了解Python的途径之一_7.6.3 子类可以继续派生新类

网友投稿 49 2023-11-07

【摘要】 本书摘自《Python学习笔记 从入门到实战》一书中第7章,第6节,由张学建编著。

7.6.3 子类可以继续派生新类

在 Python程序中,根据项目情况的需要,可以基于一个子类继续创建一个子类。这种情 况是非常普遍的,例如在使用代码模拟实物时,开发者可能会发现需要给类添加越来越多的 细节,这样随着属性和方法个数的增多,代码也变得更加复杂,十分不利于阅读和后期维护。 在这种情况下,为了使整个代码变得更加直观一些,可能需要将某个类中的一部分功能作为 一个独立的类提取出来。例如我们可以将大型类(例如类A) 派生成多个协同工作的小类, 既可以将它们划分为和类A 同级并列的类,也可以将它们派生为类A 的子类。例如我们发 现宝马汽车类Bmw 中的发动机属性和方法非常复杂,例如5系有多款车型,每个车型的发 动机参数也不一样,随着程序功能的增多,很需要将发动机作为一个独立的类进行编写。

例如在下面的实例代码中,将原来保存在类 Bmw 中和发动机有关的这些属性和方法提 取出来,放到另一个名为Motor 的类中,将类Motor 作为类 Bmw 的子类,并将一个Motor 实例作为类 Bmw 的一个属性。

实例7-19:豆腐车的升级版

源码路径:下载包\daima-19

《Python学习笔记 从入门到实战》_更了解Python的途径之一_7.6.3 子类可以继续派生新类

实例文件 bmw530li.py 的具体实现代码如下所示。

class Bmw(Car):

"""这是一个子类 Bmw, 基类是Car."""

def _init__(self,manufacturer,model,year):

=Motor()

"""类Motor 是类 Car 的子类"""

⑧ def nit (self,Motor_size=60):

n"初始化发动机属性"m"

self.Motor_size =Motor_size

def describe_motor(self):

"n" 输出发动机参数"""

print(" 这款车的发动机参数是"+ str(self.Motor_size)+”24

涡轮增压,225KW, 能拉一吨豆腐。")

my_tesla =Bmw('宝马','535Li','2019 款’

对上述实例代码的具体说明如下所示。

(1)和本章前面的实例7-18相比,只是加粗部分代码不一样。

(2)在第6行定义了一个名为Motor 的新类,此类继承于类 Bmw 。在第8行的方法 init O 中,除了属性 self 之外,还设置了形参Motor size。形参Motor size 是可选的,如果 没有给它提供值,发动机功率将被设置为60。另外,方法 describe_motor) 的实现代码也被 放置到了这个类Motor 中。

(3)在类Bmw中,添加了一个名为self.Motor的属性(第5行)。运行这行代码后, Python 会创建一个新的Motor 实例。因为没有指定发动机的具体参数,所以会被设置为默认 值60,并将该实例存储在属性 self.Motor 中。因为每当方法 n it) 被调用时都会执行这 个操作,所以在每个 Bmw 实例中都包含一个自动创建的 Motor 实例。

(4)创建了一辆宝马汽车,并将其存储在变量 my_tesla 中。在描述这辆宝马车的发动 机参数时,需要使用类 Bmw 中的属性 Motor。

(5)调用方法 describe_motor)。

(6)整个实例的继承关系就是类Car 是父类,在下面创建了一个子类Bmw, 而在子类 Bmw 中又创建了一个子类Motor 。可以将类Motor 看作类Car 的孙子,这样类Motor 不但会 继承类 Bmw 的方法和属性,而且也会继承 Car 的方法和属性。

执行后Python 会在实例 my_tesla中查找属性Motor, 并对存储在该属性中的 Motor 调用方 法 describe_motor() 输出信息。7.6.4 私有属性和私有方法

在 Python 程序中,当子类继承了父类之后,虽然子类具有了父类的属性与方法,但是不 能继承父类中的私有属性和私有方法(属性名或方法名的前缀为两个下画线),在子类中还可 以使用重写的方式来修改父类的方法,以实现与父类不同的行为表现或能力。例如在下面的实 例中,虽然类A 和类B 是继承关系,但是不能相互访问私有变量。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 [email protected] 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:《自己动手写 Python 虚拟机》_更理解虚拟机的意义_3.2 加载 CodeObject
下一篇:《Excel VBA+SQL数据管理与应用模板开发》_工作效率UP!_8.1.3 声明和使用对象变量
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×