脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服务器之家 - 脚本之家 - Python - python中关于对super()函数疑问解惑

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

2022-08-11 11:33YZL40514131 Python

Python中的super()是用于调用父类(或父类的父类...)方法的函数,主要用于多继承,单继承问题不大,下面这篇文章主要给大家介绍了关于python中关于对super()函数疑问解惑的相关资料,需要的朋友可以参考下

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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异常

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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’>)

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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()函数解惑内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/YZL40514131/article/details/125753234

延伸 · 阅读

精彩推荐
  • Python基于Django与ajax之间的json传输方法

    基于Django与ajax之间的json传输方法

    今天小编就为大家分享一篇基于Django与ajax之间的json传输方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    清清泪5722021-02-26
  • Pythonpandas筛选某列出现编码错误的解决方法

    pandas筛选某列出现编码错误的解决方法

    今天小编就为大家分享一篇pandas筛选某列出现编码错误的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    心很大很大3562021-04-16
  • Python详解django中自定义标签和过滤器

    详解django中自定义标签和过滤器

    本篇文章主要介绍了django中自定义标签和过滤器,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    MnCu5642020-11-22
  • Pythonpandas to_excel 添加颜色操作

    pandas to_excel 添加颜色操作

    这篇文章主要介绍了pandas to_excel 添加颜色操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 ...

    伏地僧34112020-07-14
  • Python对python文件读写的缓冲行为详解

    对python文件读写的缓冲行为详解

    今天小编就为大家分享一篇对python文件读写的缓冲行为详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    afterlake9382021-05-27
  • Pythondjango 发送邮件和缓存的实现代码

    django 发送邮件和缓存的实现代码

    这篇文章主要介绍了django 发送邮件和缓存的实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    rottengeek6442021-03-18
  • Python利用Python实现QQ实时到账免签支付功能

    利用Python实现QQ实时到账免签支付功能

    这篇文章主要介绍了利用Python实现QQ实时到账免签支付功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参...

    学不好python不改名7632021-09-19
  • PythonPython之py2exe打包工具详解

    Python之py2exe打包工具详解

    下面小编就为大家带来一篇Python之py2exe打包工具详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    脚本之家2812020-11-17