super().__ init__ ()有什么用?super().__init__() 、 super(b,self).__init__()
1、分别理解super()和 __ init __()1.1、super()
需要注意的是python2、3的super写法稍有不同。
1.2、__ init __()__init__() 是python中的构造函数,在创建对象的时"自动调用"。
定义类时可以不写init方法,系统会默认创建,你也可以写一个,让你的类在创建时完成一些“动作”。
1.3、super(). __ init __()如果子类b和父类a,都写了init方法,
那么a的init方法就会被b覆盖。想调用a的init方法需要用super去调用。
当然,在b内部,除了用super调用父类的方法,也可以用父类名调用,例:
class b(a):    def __init__(self):        a.__init__(self)        print("b init")
1.3.1、关于“覆盖”的疑问有人可能会误解“覆盖”的意思,认为“覆盖”了就是没有,为什么还能通过super调用?
覆盖了并不是没有了,a的方法终都还在,但需要在b内部用super调用。
例:a里写了一个方法hi(), b继承自a, b里也写了一个方法hi()。b的对象在外部调用hi(), 就只能调用b里面写的这个hi()。想通过b调用a的hi(),只能在b内部用super().hi()调用。
class a:    def hi(self):        print("a hi")class b(a):    def hello(self):        print("b hello")        b = b()b.hi()       # b里没有写hi(),这里调用的是继承自a的hi()------------------------------------------------------------------class a:    def hi(self):        print("a hi")class b(a):    def hi(self):        print("b hi")        b = b()b.hi()    # 这里调用的就是b自己的hi()------------------------------------------------------------------class a:    def hi(self):        print("a hi")class b(a):    def hi(self):        super().hi()         # 通过super调用父类a的hi()        print("b hi")        b = b()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 实例:
class a:     def add(self, x):         y = x+1         print(y)class b(a):    def add(self, x):        super().add(x)b = b()b.add(2)  # 3
python2.x 实例:
#!/usr/bin/python# -*- coding: utf-8 -*- class a(object):   # python2.x 记得继承 object    def add(self, x):         y = x+1         print(y)class b(a):    def add(self, x):        super(b, self).add(x)b = b()b.add(2)  # 3
3、关于继承顺序最底层:先写一个父类a
class a:    def __init__(self):        print('a')
第二层:让 b、c、d 继承自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__()
第三层: e、f、g 继承
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继承自e, f是并列的,初始化的时候不会先把e初始化完毕才初始化f。
4、从多个实例中对比super(python3)下面是三种不同的继承、调用,对比他们的区别,搞清楚super().__init__()的用途。
4.1、实例
子类名称继承内容
puple 继承所有 
puple_init 继承,但覆盖了init方法 
puple_super 继承,但覆盖了init方法,并在init里面添加了super().__init__()
4.2、运行结果与对比
4.3、完整代码
以上就是python中如何使用super()函数的__init__()方法?的详细内容。
   
 
   