一、super的作用

1.如果子类(Puple)继承父类(Person)不做初始化,那么会自动继承父类(Person)属性name。
2.如果子类(Puple_Init)继承父类(Person)做了初始化,且不调用super初始化父类构造函数,那么子类(Puple_Init)不会自动继承父类的属性(name)。
3.如果子类(Puple_super)继承父类(Person)做了初始化,且调用了super初始化了父类的构造函数,那么子类(Puple_Super)也会继承父类的(name)属性。

class Father():
def __init__(self,name = 'father'):
self.name = name class SonA(Father):
pass class SonB(Father):
def __init__(self,age ):
self.age = age class SonC(Father):
def __init__(self,name,age ): self.age = age
self.name = name
super(SonC, self).__init__(name) sona = SonA()
print(sona.name) sonb = SonB(10)
print(sonb.name) sonc = SonC('sonc',10)
print(sonc.name)
father
Traceback (most recent call last):
File "C:/Users/wiggin/PycharmProjects/AI/1简单的神经网络实现过程/test.py", line 24, in <module>
print(sonb.name)
AttributeError: 'SonB' object has no attribute 'name'
sonc

2.继承中super的调用顺序
继承中super的调用顺序是与MRO-C3的类方法查找顺序一样的
class A:
def __init__(self):
print('A') class B(A):
def __init__(self):
print('B')
super().__init__() class C(A):
def __init__(self):
print('C')
super().__init__() class D(A):
def __init__(self):
print('D')
super().__init__() class E(B, C):
def __init__(self):
print('E')
super().__init__() class F(C, D):
def __init__(self):
print('F')
super().__init__() class G(E, F):
def __init__(self):
print('G')
super().__init__() g = G()
G
E
B
F
C
D
A

Python子类构造函数调用super().__init__()用法说明的更多相关文章

  1. python 子类继承父类的__init__方法

    父类A class A(object): def __init__(self, name): self.name=name print "name:", self.name def ...

  2. C#中,子类构造函数调用父类父类构造函数的正确方式

    正确调用的方式是:

  3. python 子类继承父类__init__(转载)

    转载: http://www.jb51.net/article/100195.htm 前言 使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__方法 ...

  4. python3 super().__init__()

    父类不会自动调用__init__方法 class A: def __init__(self): A = 'A' self.a = 'a' print('init A') class B(A): def ...

  5. Python3基础 super 子类调用父类的__init__

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  6. 论super().__init__()的用法

    当我们调用 super() 的时候,实际上是实例化了一个 super 类. super 是个类,既不是关键字也不是函数等其他数据结构,该对象就是专门用来访问父类中的属性的(严格按照继承的关系). -- ...

  7. python基础----多态与多态性、super函数用法、继承原理

    一.多态与多态性                                                                        ㈠多态: 多态指的是一类事物有多种形态, ...

  8. python中super().__init__和类名.__init__的区别

    super().__init__相对于类名.__init__,在单继承上用法基本无差 但在多继承上有区别,super方法能保证每个父类的方法只会执行一次,而使用类名的方法会导致方法被执行多次 多继承时 ...

  9. Python中super的用法【转载】

    Python中super的用法[转载] 转载dxk_093812 最后发布于2019-02-17 20:12:18 阅读数 1143  收藏 展开 转载自 Python面向对象中super用法与MRO ...

随机推荐

  1. 12个让您震撼的Linux终端命令

    以下快捷键很有用,可以节省你的时间: CTRL+U: 从光标处删除文本直到行首. CTRL+K: 从光标处删除文本直到行尾. CTRL+Y: 粘贴文本. CTRL+E: 将光标移动到行尾. CTRL+ ...

  2. AIRAC

    AIRAC是国际上划定的,以28天为一个周期的航行资料定期生效制. 2020年比较特殊,共有14个周期,分别是: 2001 2020/01/02 2020/01/29 2002 2020/01/30 ...

  3. sublime text 3 关联鼠标右击

    比如有网上有如下方法 https://my.oschina.net/adairs/blog/466777 , 其实一个更简单的方法是运行sublime setup.exe , 直接会有相关提示,下一步 ...

  4. iptables做nat网络地址转换

    iptables做nat网络地址转换. 0. 权威文档 http://www.netfilter.org/documentation/HOWTO/NAT-HOWTO-6.html e文好的直接跳过本文 ...

  5. 4.3 Go for

    4.3 Go for Go的for循环是一个循环控制结构,可以执行循环次数. 语法 package main import "fmt" func main() { //创建方式一, ...

  6. SVN:TortoiseSVN SendRpt.exe not found 完美解决

    今天来上班的时候,发现公司用的svn版本和我自己的不一致,其实可以使用但是还是神经质的更新了一下.结果每次右键都会出一个异常.下图所示. 期初以为是哪里配置错误,或者版本冲突,经过网上查找办法,完美解 ...

  7. Java的集合(一)

    转载:https://blog.csdn.net/hacker_zhidian/article/details/80590428 Java集合概况就三个:List.set和map list(Array ...

  8. 二、工具类ImageUtil——图片处理

    这个工具类完成的工作如下: 1.第一个static方法,完成图片格式的转换.统一转换成.jpg格式. package util; import java.awt.Toolkit; import jav ...

  9. Java——倒序输出Map集合

    package com.java.test.a; import java.util.ArrayList; import java.util.LinkedHashMap; import java.uti ...

  10. 搭建Istio基础环境

    需求 搭建istio基础环境(基于1.5.1版本) 安装步骤 在安装 Istio 之前,需要一个运行着 Kubernetes 的环境,安装步骤可以参考前面的文章 下载istio,然后解压,然后将 is ...