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

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

服务器之家 - 脚本之家 - Python - python中super().__init__()的用法

python中super().__init__()的用法

2023-03-30 15:37BeanInJ Python

python里的super().__init__()有什么作用?很多同学没有弄清楚。super()用来调用父类(基类)的方法,__init__()是类的构造方法,感兴趣的小伙伴可以参考阅读本文

super().__ init__ ()有什么用?

  1. super().__init__() super(B,self).__init__()

1、分别理解super()和 __ init __()

 

1.1、super()

python中super().__init__()的用法

  1. 需要注意的是python23super写法稍有不同。

1.2、__ init __()

__init__() 是python中的构造函数,在创建对象的时"自动调用"。

python中super().__init__()的用法

  1. 定义类时可以不写init方法,系统会默认创建,
  2. 你也可以写一个,让你的类在创建时完成一些“动作”。

1.3、super(). __ init __()

如果子类B和父类A,都写了init方法, 那么A的init方法就会被B覆盖。想调用A的init方法需要用super去调用。

python中super().__init__()的用法

当然,在B内部,除了用super调用父类的方法,也可以用父类名调用,例:

  1. class B(A):
  2. def __init__(self):
  3. A.__init__(self)
  4. print("B init")
1.3.1、关于“覆盖”的疑问

有人可能会误解“覆盖”的意思,认为“覆盖”了就是没有,为什么还能通过super调用? 覆盖了并不是没有了,A的方法终都还在,但需要在B内部用super调用。

  1. 例:
  2. A里写了一个方法hi(), B继承自A, B里也写了一个方法hi()。
  3. B的对象在外部调用hi(), 就只能调用B里面写的这个hi()。
  4. 想通过B调用Ahi(),只能在B内部用super().hi()调用。
  1. class A:
  2. def hi(self):
  3. print("A hi")
  4.  
  5. class B(A):
  6. def hello(self):
  7. print("B hello")
  8.  
  9. b = B()
  10. b.hi() # B里没有写hi(),这里调用的是继承自A的hi()
  11.  
  12. ------------------------------------------------------------------
  13. class A:
  14. def hi(self):
  15. print("A hi")
  16.  
  17. class B(A):
  18. def hi(self):
  19. print("B hi")
  20.  
  21. b = B()
  22. b.hi() # 这里调用的就是B自己的hi()
  23. ------------------------------------------------------------------
  24. class A:
  25. def hi(self):
  26. print("A hi")
  27.  
  28. class B(A):
  29. def hi(self):
  30. super().hi() # 通过super调用父类A的hi()
  31. print("B hi")
  32.  
  33. b = B()
  34. b.hi() # 这里调用的就是B里面的hi()

2、super() 在 python2、3中的区别

Python3.x 和 Python2.x 的一个区别: Python 3 可以使用直接使用 super().xxx 代替 super(Class, self).xxx :

例: python3 直接写成 : super().__init__() python2 必须写成 :super(本类名,self).__init__()

Python3.x 实例:

  1. class A:
  2. def add(self, x):
  3. y = x+1
  4. print(y)
  5. class B(A):
  6. def add(self, x):
  7. super().add(x)
  8. b = B()
  9. b.add(2) # 3

Python2.x 实例:

  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3.  
  4. class A(object): # Python2.x 记得继承 object
  5. def add(self, x):
  6. y = x+1
  7. print(y)
  8. class B(A):
  9. def add(self, x):
  10. super(B, self).add(x)
  11. b = B()
  12. b.add(2) # 3

3、关于继承顺序

最底层:先写一个父类A

  1. class A:
  2. def __init__(self):
  3. print('A')

第二层:让 B、C、D 继承自A

  1. class B(A):
  2. def __init__(self):
  3. print('B')
  4. super().__init__()
  5.  
  6. class C(A):
  7. def __init__(self):
  8. print('C')
  9. super().__init__()
  10.  
  11. class D(A):
  12. def __init__(self):
  13. print('D')
  14. super().__init__()

第三层: E、F、G 继承

  1. class E(B, C):
  2. def __init__(self):
  3. print('E')
  4. super().__init__()
  5.  
  6. class F(C, D):
  7. def __init__(self):
  8. print('F')
  9. super().__init__()
  10.  
  11. class G(E, F):
  12. def __init__(self):
  13. print('G')
  14. super().__init__()

看看G的继承顺序

python中super().__init__()的用法

python中super().__init__()的用法

我们发现G继承自E, F是并列的,初始化的时候不会先把E初始化完毕才初始化F。

4、从多个实例中对比super(python3)

下面是三种不同的继承、调用,对比他们的区别,搞清楚super().__init__()的用途。

4.1、实例

python中super().__init__()的用法

子类名称 继承内容
Puple 继承所有
Puple_Init 继承,但覆盖了init方法
Puple_Super 继承,但覆盖了init方法,并在init里面添加了super().__init__()

4.2、运行结果与对比

python中super().__init__()的用法

4.3、完整代码

python中super().__init__()的用法

到此这篇关于python中super().__init__()的用法的文章就介绍到这了,更多相关super().__init__()的用法内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/a__int__/article/details/104600972

延伸 · 阅读

精彩推荐
  • Pythonpython tkinter实现弹窗的输入输出

    python tkinter实现弹窗的输入输出

    这篇文章主要为大家详细介绍了python tkinter实现弹窗的输入输出,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    殷殷殷先森丶11172022-09-25
  • Python详解基于python的全局与局部序列比对的实现(DNA)

    详解基于python的全局与局部序列比对的实现(DNA)

    这篇文章主要介绍了详解基于python的全局与局部序列比对的实现(DNA).文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,...

    mmqwqf4132020-10-07
  • Pythonselenium+python设置爬虫代理IP的方法

    selenium+python设置爬虫代理IP的方法

    这篇文章主要介绍了selenium+python设置爬虫代理IP的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友...

    Kosmoo7222021-04-23
  • PythonPython中用pycurl监控http响应时间脚本分享

    Python中用pycurl监控http响应时间脚本分享

    这篇文章主要介绍了Python中用pycurl监控http响应时间脚本分享,本文脚本实现监控http相应码,响应大小,建立连接时间,准备传输时间,传输第一个字节时间,完成...

    脚本之家4032020-05-21
  • Pythonpython 函数的详解与应用范例

    python 函数的详解与应用范例

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内...

    不侠居10692022-02-26
  • PythonPyQt5 QListView 高亮显示某一条目的案例

    PyQt5 QListView 高亮显示某一条目的案例

    这篇文章主要介绍了PyQt5 QListView 高亮显示某一条目的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    weixin_461852148322021-09-24
  • Python用Python实现大文本文件切割的方法

    用Python实现大文本文件切割的方法

    今天小编就为大家分享一篇用Python实现大文本文件切割的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    zhang_qxian12042021-05-15
  • Python解决python中set与dict的无序问题

    解决python中set与dict的无序问题

    这篇文章主要介绍了解决python中set与dict的无序问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    big蟒蛇10992021-09-18