美文网首页
Python中super函数的使用

Python中super函数的使用

作者: 4thirteen2one | 来源:发表于2019-04-30 18:43 被阅读0次

super() 函数是用于调用父类(超类)的一个方法。self 始终为子类的实例

super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO,Method Resolution Order)、重复调用(钻石继承)等种种问题。

MRO 就是类的方法解析顺序表, 其实也就是继承父类方法时的顺序表。

在单重继承中用不用 super 都没关系;但是,使用 super() 是一个好的习惯。一般我们在子类中需要调用父类的方法时才会这么用。

class A:
 def m(self):
  print('A')
 
class B:
 def m(self):
  print('B')
 
class C(A):
 def m(self):
  print('C')
  super().m()
 
C().m()

super()的好处就是可以避免直接使用父类的名字:如果你要改变子类继承的父类(由A改为B),你只需要修改一行代码(class C(A): -> class C(B))即可,而不需要在class C 的大量代码中去查找、修改基类名,另外一方面代码的可移植性和重用性也更高

使用super

class A:
    def __init__(self):
        print("Enter A")
        print("Leave A")

class B(A):
    def __init__(self):
        print("Enter B")
        super(B, self).__init__()
        print("Leave B")

class C(A):
    def __init__(self):
        print("Enter C")
        super(C, self).__init__()
        print("Leave C")

class D(A):
    def __init__(self):
        print("Enter D")
        super(D, self).__init__()
        print("Leave D")

class E(B, C, D):
    def __init__(self):
        print("Enter E")
        super(E, self).__init__()
        print("Leave E")

E()

运行结果为:(E, (B, C, D), A, A, (D, C, B), E)

Enter E
Enter B
Enter C
Enter D
Enter A
Leave A
Leave D
Leave C
Leave B
Leave E

不使用super

class A:
    def __init__(self):
        print("Enter A")
        print("Leave A")

class B(A):
    def __init__(self):
        print("Enter B")
        A.__init__(self)
        print("Leave B")

class C(A):
    def __init__(self):
        print("Enter C")
        A.__init__(self)
        print("Leave C")

class D(A):
    def __init__(self):
        print("Enter D")
        A.__init__(self)
        print("Leave D")

class E(B, C, D):
    def __init__(self):
        print("Enter E")
        B.__init__(self)
        C.__init__(self)
        D.__init__(self)
        print("Leave E")

E()

运行结果为:(E, B(AA)B, C(AA)C, D(AA)D, E)

Enter E
Enter B
Enter A
Leave A
Leave B
Enter C
Enter A
Leave A
Leave C
Enter D
Enter A
Leave A
Leave D
Leave E

相关文章

  • 怎么理解Python类中的super函数

    前言 在Python类的继承中,经常能看到super函数的存在,那super函数主要的作用,以及如何理解和使用好这...

  • Python中super函数的使用

    super() 函数是用于调用父类(超类)的一个方法。self 始终为子类的实例 super 是用来解决多重继承问...

  • python 神奇的super()

    我们都知道在python继承中,子类调用父类的方法是使用super()函数,在2.X里格式是super(mycla...

  • python super方法,MRO详解

    python2和python3中super的使用: python2中的super只适用与新式类,在早期的pytho...

  • python中的super() 函数

    super() 函数是用于调用父类(超类)的一个方法。 super 是用来解决多重继承问题的,直接用类名调用父类方...

  • Class中的super简析

    super当作函数使用 super()执行父类的构造函数 super() 返回的是子类的实例,即 super 内部...

  • python super()和classmethod

    @(python) super(type, obj) 子类中定义了同父类同名的函数后,需要显示调用父类函数时,可以...

  • python 面向对象: super()

    python 关于 super 的使用 子类对象调用父类方法 :super(B,b).hh() 子类中调用父类方法...

  • python中super的使用

    super的简单用法 多继承中super的使用   super简单的说是调用父类的方法,不管是父类的初始化方法还是...

  • Twleve Day(面向对象之继承II)

    函数的复写(override)2.使用super调用父类的成员函数3.使用super调用父类的构造函数 比较sup...

网友评论

      本文标题:Python中super函数的使用

      本文链接:https://www.haomeiwen.com/subject/sjxbnqtx.html