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

>>>

 

 

目录
相关文章
|
12月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
687 1
|
机器学习/深度学习 数据采集 数据挖掘
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
440 2
|
12月前
|
人工智能 数据安全/隐私保护 异构计算
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
1739 8
桌面版exe安装和Python命令行安装2种方法详细讲解图片去水印AI源码私有化部署Lama-Cleaner安装使用方法-优雅草卓伊凡
|
算法 调度 决策智能
【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
345 0
|
机器学习/深度学习 数据采集 TensorFlow
基于CNN-GRU-Attention混合神经网络的负荷预测方法(Python代码实现)
基于CNN-GRU-Attention混合神经网络的负荷预测方法(Python代码实现)
677 0
|
SQL JSON C语言
Python中字符串的三种定义方法
Python中字符串的三种定义方法
953 2
|
Python
Python面向对象、类的抽象、类的定义、类名遵循大驼峰的命名规范创建对象、类外部添加和获取对象属性、类内部操作属性魔法方法__init__()__str__()__del__()__repr__()
面向对象和面向过程,是两种编程思想. 编程思想是指对待同一个问题,解决问题的套路方式.面向过程: 注重的过程,实现的细节.亲力亲为.面向对象: 关注的是结果, 偷懒.类和对象,是面向对象中非常重要的两个概念object 是所有的类基类,即最初始的类class 类名(object): 类中的代码PEP8代码规范:类定义的前后,需要两个空行 创建的对象地址值都不一样如dog和dog1的地址就不一样,dog的地址为2378043254528dog1的地址为2378044849840 8.类内部操作属性 sel
674 1
Python面向对象、类的抽象、类的定义、类名遵循大驼峰的命名规范创建对象、类外部添加和获取对象属性、类内部操作属性魔法方法__init__()__str__()__del__()__repr__()
28.从入门到精通:Python3 面向对象 面向对象技术简介 类定义 类对象 类的方法
28.从入门到精通:Python3 面向对象 面向对象技术简介 类定义 类对象 类的方法

推荐镜像

更多