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

>>>

 

 

目录
相关文章
|
2月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
284 1
|
3月前
|
机器学习/深度学习 数据采集 数据挖掘
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
115 2
|
2月前
|
人工智能 数据安全/隐私保护 异构计算
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
358 8
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
|
2月前
|
算法 调度 决策智能
【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
|
3月前
|
机器学习/深度学习 数据采集 TensorFlow
基于CNN-GRU-Attention混合神经网络的负荷预测方法(Python代码实现)
基于CNN-GRU-Attention混合神经网络的负荷预测方法(Python代码实现)
131 0
|
数据库 Python
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(下)
## 封装,继承和多态 ## 1.封装 1、满足把内容封装到某个地方,另一个地方去调用封装的内容 2、使用初始化构造方法,或者使用self获取封装的内容 ## 2.继承 子类继承父类的属性和内容
226 0
|
Python
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
## 封装,继承和多态 ## 1.封装 1、满足把内容封装到某个地方,另一个地方去调用封装的内容 2、使用初始化构造方法,或者使用self获取封装的内容 ## 2.继承 子类继承父类的属性和内容
213 0
|
2月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
261 102
|
2月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
295 104
|
2月前
|
人工智能 自然语言处理 算法框架/工具
Python:现代编程的首选语言
Python:现代编程的首选语言
247 103

推荐镜像

更多