ad

《Python学习笔记 从入门到实战》_更了解Python的途径之一_7.6.5 多重继承

网友投稿 117 2023-11-07

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

7.6.5 多重继承

在面向对象编程的语言中,有很多开发语言支持多重继承。多重继承是指一个类可以同 时继承多个,在实现多重继承定义时,在定义类时需要继承父类的小括号中以“,”分隔开要 多重继承的父类。具体语法格式如下所示。

class DerivedClassName(Basel,Base2,Base3):

上述语法格式很容易理解 “DerivedClassName” 表示子类名,小括号中的“Basel”“Base2”

和 “Base3” 表示多个父类名。在Python多重继承程序中,继承顺序是一个很重要的 要素。如果继承的多个父类中有相同的方法名,但在类中使用时未指定父类名,则 Python 解释器将从左至右搜索,即调用先继承的类中的同名方法。

《Python学习笔记 从入门到实战》_更了解Python的途径之一_7.6.5 多重继承

例如在下面的实例中,演示了实现多重继承的过程。

实例7-21:3个子类的多重继承

源码路径:下载包\daima\7\7-21

实例文件 duo.py 的具体实现代码如下所示。 class PrntOne:

namea ='PrntOne'

def sest_eelf,namea):

PrntOne,namea =namea

def info(self):

#定义类 PrntOne

#定义方法set_value()

#设置属性值

#定义方法set_namea()

#设置属性值

井定义方法info()

print('PrntOne:8s,%s'8(PrntOne.namea,self.a))

class PrntSecond:

nameb ='PrntSecond'

def set_nameb(self,nameb):

PrntSecond.nameb =name

#定义类 PrntSecond

#定义变量

#定义方法 set_nameb(

#设置属性值

def info(self): #定义方法info()

print('PrntSecond:8s '告(PrntSecond.nameb,))

class Sub(Prntone,PrntSecond): pass

class Sub2(PrntSecond,PrntOne):

pass

class Sub3(PrntOne,PrntSecond): def info(self):

PrntOne.info(self)

PrntSecond.info(self)

nb)第一个子类:!

sub.set_value('11111')

sub.info()

sub.set_nameb('22222')

sub.info()

print( '使用第二个子类: ')

sub2=Sub2()

sub2.set_value('33333')

sub2.info()

sub2.set_nameb('44444')

sub2.info()

print('使用第三个子类:')

sub3=Sub3()

sub3.set_value('55555')

sub3.info()

sub3.set_nameb('66666')

sub3.info()

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

#调用方法 set_nameb()

#调用方法info()

(1)首先定义了两个父类PmtOne 和 PrmtSecond,它们有一个同名的方法infoO用于输 出类的相关信息。

(2)第一个子类Sub 先后继承了PrntOne,PrntSecond, 在实例化后,先调用PrntOne 中的方法,然后调用了infoO 方法,由于两个父类中有同名的方法info(), 所以实际上调用 了PmtOne 中的infoO 方法,因此只输出了从父类 PrmtOne 中继承的相关信息。

(3)第二个子类Sub2 继承的顺序相反,当调用infoO 方法时,实际上调用的是属于 PrntSecond 中的 infoO方法,因此只输出从父类PmtSecond 中继承的相关信息。

(4)第三个子类Sub3 继承的类及顺序和第一个子类Sub 相同,但是修改了父类中的 infoO方法,在其中分别调用了两个父类中的infoO 方法,因此,每次调用Sub3 类实例的 infoO 方法,两个被继承的父类中的信息都输出了。

当使用第1个和第2个子类时,虽然两次调用了方法infoO, 但是仅输出了其中一个父 类的信息。当使用第三个子类时,每当调用方法 infoO时会同时输出两个父类的信息。执行 后会输出:

使用第一个子类:

PrntOne:PrntOne,11111

PrntOne:PrntOne,11111

使用第二个子类:

PrntSecond:22222

PrntSecond:44444

使用第三个子类:

PrntOne:PrntOne,55555

PrntSecond:44444

PrntOne:PrntOne,55555

PrntSecond:66666

7.7 方法重写

在Python程序中,当子类在使用父类中的方法时,如果发现父类中的方法不符合子类的需求, 可以对父类中的方法进行重写。在重写时需要先在子类中定义一个这样的方法,与要重写 的父类中的方法同名,这样Python程序将不会再使用父类中的这个方法,而只使用在子类 中定义的这个和父类中重名的方法(重写方法)。

1扫码看视频(本节视频课程时间:4分36秒)

例如在下面的实例中,演示了实现方法重写的过程。

实例7-22:通过重写修改方法的功能

源码路径:下载包\daima\7\7-22

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

上一篇:达人之路·《高效办公应用宝典公式·函数与VBA》_5.2.4 定义常量和常量数组名称
下一篇:跟着一起学《Excel VBA跟卢子一起学 早做完 不加班 基础入门版》_2.2.3 标准模块对象
相关文章

 发表评论

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

×