python中关于对super()函数疑问解惑

 更新时间:2022年08月11日 09:57:06   作者:YZL40514131  
Python中的super()是用于调用父类(或父类的父类...)方法的函数,主要用于多继承,单继承问题不大,下面这篇文章主要给大家介绍了关于python中关于对super()函数疑问解惑的相关资料,需要的朋友可以参考下

案例一:运行下面的代码结果是什么?

class Person:
    def run(self):
        print('studying')

class Person1:
    def run(self):
        print('working')

class Person2:
    def run(self):
        print('playing')

class Person3(Person,Person1,Person2):

    def run(self):
        super().run1()

p=Person3()
p.run()

执行结果:

AttributeError: ‘super’ object has no attribute ‘run1’

注意:

1、一个类继承多个类时,如果父类中没有提供该方法,类会通过__mro__属性一直向上搜索,如果直到object还没有搜索到该方法,那么将会引发AttributeError异常

案例二:运行下面的代码结果是什么?

class Person:
    def run(self):
        print('studying')

class Person1:
    def run(self):
        print('working')

class Person2:
    def run(self):
        print('playing')

class Person3(Person,Person1,Person2):

    def run(self):
        super(Person1,self).run()

p=Person3()
p.run()

输出结果为:playing;而不是working

注意:

1、super()函数的使用。
使用super()函数时,可以通过super(类名,self)来指定对哪个对象以哪个类为起点向上搜索父类中的方法。
例如:super(Person1,self).run():表示以Person1类为起点,向上搜索self(Person3的对象)的run方法。
Person1向上搜索到了<class ‘main.Person2’>,所以才会输出playing

2、print(Person3.mro)的继承顺序为:(<class ‘main.Person3’>, <class ‘main.Person’>, <class ‘main.Person1’>, <class ‘main.Person2’>, <class ‘object’>)

案例三、更复杂些的继承,和上面的同理

class A:
    def who(self):
        print('A', end='')

class B(A):
    def who(self):
        super(B, self).who()
        print('B', end='')

class C(A):
    def who(self):
        super(C, self).who()
        print('C', end='')

class D(B, C):
    def who(self):
        super(D, self).who()
        print('D', end='')

item = D()
item.who()


print(D.__mro__)

输出结果:

ACBD
(<class ‘main.D’>, <class ‘main.B’>, <class ‘main.C’>, <class ‘main.A’>, <class ‘object’>)

总结

到此这篇关于python中关于对super()函数疑问解惑的文章就介绍到这了,更多相关python super()函数解惑内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python实现给微信公众号发送消息的方法

    python实现给微信公众号发送消息的方法

    这篇文章主要介绍了python实现给微信公众号发送消息的方法,结合实例形式分析了Python针对微信公众号接口操作的相关技巧,需要的朋友可以参考下
    2017-06-06
  • Python+Matplotlib绘制发散条形图的示例代码

    Python+Matplotlib绘制发散条形图的示例代码

    发散条形图(Diverging Bar)是一种用于显示数据分布的图表,可以帮助我们比较不同类别或分组的数据的差异和相对性,本文介绍了Matplotlib绘制发散条形图的函数源码,需要的可以参考一下
    2023-06-06
  • Pandas DataFrame中的tuple元素遍历的实现

    Pandas DataFrame中的tuple元素遍历的实现

    这篇文章主要介绍了Pandas DataFrame中的tuple元素遍历的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • 一文搞懂python 中的迭代器和生成器

    一文搞懂python 中的迭代器和生成器

    这篇文章主要介绍了python 中的迭代器和生成器简单介绍,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • python闭包的实例详解

    python闭包的实例详解

    在本篇文章里小编给大家整理的是一篇关于python闭包的实例详解内容,有兴趣的朋友们可以学习下。
    2021-10-10
  • Python输出由1,2,3,4组成的互不相同且无重复的三位数

    Python输出由1,2,3,4组成的互不相同且无重复的三位数

    这篇文章主要介绍了Python输出由1,2,3,4组成的互不相同且无重复的三位数,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • Python实现的维尼吉亚密码算法示例

    Python实现的维尼吉亚密码算法示例

    这篇文章主要介绍了Python实现的维尼吉亚密码算法,结合实例形式分析了基于Python实现维尼吉亚密码算法的定义与使用相关操作技巧,需要的朋友可以参考下
    2018-04-04
  • Python装饰器原理与用法分析

    Python装饰器原理与用法分析

    这篇文章主要介绍了Python装饰器原理与用法,结合实例形式分析了Python装饰器的概念、原理、使用方法及相关操作注意事项,需要的朋友可以参考下
    2018-04-04
  • Python学习之异常处理详解

    Python学习之异常处理详解

    正常情况下,我们的程序是自上而下的逐行执行,执行到最后一行才会终止程序的执行。而异常的情况会导致我们的程序半途而废停止了执行。本文将通过示例详细讲解Python中的异常处理,感兴趣的可以学习一下
    2022-03-03
  • Python类的高级函数详解

    Python类的高级函数详解

    这篇文章主要介绍了Python类的高级函数,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08

最新评论