python中的super

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()  

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

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()  

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

在super机制里可以保证公共父类仅被执行一次,至于执行的顺序,是按照MRO(Method Resolution Order):方法解析顺序 进行的。

你可能感兴趣的:(python中的super)