python中super的用法
阿新 • • 發佈:2018-12-09
super()方法的漂亮之處在於,你不需要在定義子類構造器時,明確的指定子類的基類並顯式的呼叫,即不需要明確的提供父類,這樣做的好處就是,如果你改變了繼承的父類,你只需要修改一行程式碼(class程式碼行),而不需要在大量程式碼中去查詢那個要修改的基類。另外一方面程式碼的可移植性和重用性也更高。
1、單繼承
class FooParent(object): def __init__(self): self.parent = 'I\'m the parent.' print ('Parent') def bar(self,message): print (message,'from Parent') class FooChild(FooParent): def __init__(self): super(FooChild,self).__init__() print ('Child') def bar(self,message): super(FooChild, self).bar(message) print ('Child bar fuction') print (self.parent) if __name__ == '__main__': fooChild = FooChild() fooChild.bar('HelloWorld')
答案是:
Parent
Child
HelloWorld from Parent
Child bar fuction
I'm the parent.
2、多繼承
class A: def __init__(self): #print(super()) print("Enter A") print("Leave A") class B(A): def __init__(self): print("Enter B") #print(super()) super().__init__() print("Leave B") # single = B() # print(B.mro()) class C(A): def __init__(self): print("Enter C") print(super()) super().__init__() print("Leave C") class D(B,C): def __init__(self): print("Enter D") #print(super()) super().__init__() print("Leave D") D() print(D.mro())
結果:
Enter D
Enter B
Enter C
<super: <class 'C'>, <D object>>
Enter A
Leave A
Leave C
Leave B
Leave D
[<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]