Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)2

简介: Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)2

场景3、多重继承

实验1

class FatherA:

   def __init__(self):

       print('init action in father class A')

 

class FatherB:

   def __init__(self):

       print('init action in father class B')

 

class SubClassC(FatherA, FatherB):

   def __init__(self):

       print('init action in subclass C')

       super(FatherB).__init__()

 

 

if __name__ == '__main__':

   b = SubClassC()

 

运行结果:

>>> ================================ RESTART ================================

>>>

init action in subclass C

 

 

对比实验1-1

class FatherA:

   def __init__(self):

       print('init action in father class A')

 

class FatherB:

   def __init__(self):

       print('init action in father class B')

 

class SubClassC(FatherB, FatherA):

   def __init__(self):

       print('init action in subclass C')

       super().__init__()

 

if __name__ == '__main__':

   b = SubClassC()

 

运行结果:

>>> ================================ RESTART ================================

>>>

init action in subclass C

init action in father class B

>>>

 

对比实验1-2

class FatherA:

   def __init__(self):

       print('init action in father class A')

 

class FatherB:

   def __init__(self):

       print('init action in father class B')

 

class SubClassC(FatherA, FatherB):

   def __init__(self):

       print('init action in subclass C')

       super().__init__()

 

if __name__ == '__main__':

   b = SubClassC()

 

运行结果:

>>> ================================ RESTART ================================

>>>

init action in subclass C

init action in father class A

>>>

 

对比实验1-3

class FatherA:

   def __init__(self):

       print('init action in father class A')

 

class FatherB:

   def __init__(self):

       print('init action in father class B')

 

class SubClassC(FatherA, FatherB):

   def __init__(self):

       print('init action in subclass C')

       super(FatherB).__init__()

 

if __name__ == '__main__':

   b = SubClassC()

>>> ================================ RESTART ================================

>>>

init action in subclass C

 

对比实验1-4

class FatherA:

   def __init__(self):

       print('init action in father class A')

 

   def testfn(self, arg):

       print('testfn in father class A')

 

class FatherB:

   def __init__(self):

       print('init action in father class B')

 

   def testfn(self):

       print('testfn in father class B')

     

class SubClassC(FatherA, FatherB):

   def __init__(self):

       print('init action in subclass C')

       super().testfn()

 

if __name__ == '__main__':

   b = SubClassC()

 

运行结果:

>>> ================================ RESTART ================================

>>>

init action in subclass C

Traceback (most recent call last):

 File "C:/Users/Administrator/Desktop/1.py", line 21, in

   b = SubClassC()

 File "C:/Users/Administrator/Desktop/1.py", line 18, in __init__

   super().testfn()

TypeError: testfn() missing 1 required positional argument: 'arg'

>>>

 

对比实验1-5

class FatherA:

   def __init__(self):

       print('init action in father class A')

 

   def testfn(self):

       print('testfn in father class A')

 

class FatherB:

   def __init__(self):

       print('init action in father class B')

 

   def testfn(self, arg):

       print('testfn in father class B')

     

class SubClassC(FatherA, FatherB):

   def __init__(self):

       print('init action in subclass C')

       super().testfn()

 

if __name__ == '__main__':

   b = SubClassC()

 

运行结果:

>>> ================================ RESTART ================================

>>>

init action in subclass C

testfn in father class A

 

说明:通过对比实验1-11-21-31-41-5可以看出,子类水平方向上,继承多个父类,以super().method(参数)方法调用父类的方法,如果不同父类中存在同名方法method(不管参数列表是否相同),则按继承顺序,选择第一个父类中的方法。,如果想要调用多个方法咋办?如下,通过类名调用

 

class FatherA:

   def __init__(self):

       print('init action in father class A')

 

class FatherB:

   def __init__(self):

       print('init action in father class B')

 

class SubClassC(FatherA, FatherB):

   def __init__(self):

       print('init action in subclass C')

       FatherA.__init__(self)

       FatherB.__init__(self)

 

if __name__ == '__main__':

   b = SubClassC()

 

>>> ================================ RESTART ================================

>>>

init action in subclass C

init action in father class A

init action in father class B

>>>

 

 

目录
相关文章
|
7天前
|
Python
python方法,传参20220101 计算与当前时间差
python方法,传参20220101 计算与当前时间差
|
7天前
|
存储 Python
Python中类方法、实例方法与静态方法的区别
这三种方法的正确使用可以使代码更加清晰、组织良好并且易于理解,从而有效地支持软件开发的面向对象编程范式。
10 1
|
6天前
|
机器学习/深度学习 PyTorch TensorFlow
Python实现深度学习学习率指数衰减的方法与参数介绍
学习率指数衰减提供了一种高效的动态调整学习率的手段,帮助模型在不同训练阶段以不同的学习速度优化,有利于提升模型性能和训练效率。通过合理设置衰减策略中的参数,可以有效地控制学习率的衰减过程,实现更加精确的模型训练调优。
10 0
|
6天前
|
UED Python
Python requests库下载文件时展示进度条的实现方法
以上就是使用Python `requests`库下载文件时展示进度条的一种实现方法,它不仅简洁易懂,而且在实际应用中非常实用。
18 0
|
8天前
|
JSON JavaScript 前端开发
6-19|Python数据传到JS的方法
6-19|Python数据传到JS的方法
|
Python
【Python零基础入门篇 · 23】:类的继承(单继承和多继承)、继承重写
【Python零基础入门篇 · 23】:类的继承(单继承和多继承)、继承重写
128 0
【Python零基础入门篇 · 23】:类的继承(单继承和多继承)、继承重写
|
Python
【Python零基础入门篇 · 16】:类的继承(单继承和多继承)、继承重写、面向对象的多态、静态方法和类方法
【Python零基础入门篇 · 16】:类的继承(单继承和多继承)、继承重写、面向对象的多态、静态方法和类方法
190 0
【Python零基础入门篇 · 16】:类的继承(单继承和多继承)、继承重写、面向对象的多态、静态方法和类方法
|
Python
Python 面向对象4:单继承和多继承
Python 面向对象4:单继承和多继承
119 0
Python 面向对象4:单继承和多继承
|
1天前
|
机器学习/深度学习 人工智能 数据可视化
Python比较适合哪些场景的编程?
Python比较适合哪些场景的编程?
14 7
|
2天前
|
存储 数据处理 开发者
深入浅出:Python编程基础与实战技巧
【9月更文挑战第32天】本文将引导读者从零开始,掌握Python编程语言的核心概念,并通过实际代码示例深入理解。我们将逐步探索变量、数据结构、控制流、函数、类和异常处理等基本知识,并结合实用案例,如数据处理、文件操作和网络请求,提升编程技能。无论您是初学者还是有一定经验的开发者,这篇文章都能帮助您巩固基础,拓展视野。
下一篇
无影云桌面