Python中如何使用super()函数的__init__()方法?
时间:2023-04-27 12:22
__init__() 是python中的构造函数,在创建对象的时"自动调用"。 如果子类B和父类A,都写了init方法, 当然,在B内部,除了用super调用父类的方法,也可以用父类名调用,例: 有人可能会误解“覆盖”的意思,认为“覆盖”了就是没有,为什么还能通过super调用? Python3.x 和 Python2.x 的一个区别: Python 3 可以使用直接使用 super().xxx 代替 super(Class, self).xxx : 例: Python3.x 实例: Python2.x 实例: 最底层:先写一个父类A 第二层:让 B、C、D 继承自A 第三层: E、F、G 继承 看看G的继承顺序 我们发现G继承自E, F是并列的,初始化的时候不会先把E初始化完毕才初始化F。 下面是三种不同的继承、调用,对比他们的区别,搞清楚super().__init__()的用途。 以上就是Python中如何使用super()函数的__init__()方法?的详细内容,更多请关注Gxl网其它相关文章!super().__ init__ ()有什么用?
super().__init__() 、 super(B,self).__init__()
1、分别理解super()和 __ init __()
1.1、super()
需要注意的是python2、3的super写法稍有不同。
1.2、__ init __()
定义类时可以不写init方法,系统会默认创建,你也可以写一个,让你的类在创建时完成一些“动作”。
1.3、super(). __ init __()
那么A的init方法就会被B覆盖。想调用A的init方法需要用super去调用。class B(A): def __init__(self): A.__init__(self) print("B init")
1.3.1、关于“覆盖”的疑问
覆盖了并不是没有了,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 直接写成 : super().__init__()
python2 必须写成 :super(本类名,self).__init__()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
#!/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、关于继承顺序
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__()
4、从多个实例中对比super(python3)
4.1、实例
子类名称 继承内容 Puple 继承所有 Puple_Init 继承,但覆盖了init方法 Puple_Super 继承,但覆盖了init方法,并在init里面添加了super().__init__() 4.2、运行结果与对比
4.3、完整代码