目的: 了解什麼是old style class ? 什麼是 new style class ? 如何使用super ?
先看這篇 ,簡短的說明一下這篇內容好了:
1. class有繼承object這個class是new style class, 否則就是 old style class
2. old style class是for python 2.2以前的向下相容
3. python內建的繼承功能可以說是由 object class所提供
其中有一點很重要,就是super()功能是new style class的功能。
正規上如果B要繼承A且建構順序是先A再B, 我們就要用super()
super()的影響在多重繼承上會很明顯。
可以看這篇
總結一下:
1. super()的用法是: 第一個參數是這個class名稱, 第二個參數是self
2. 執行順序有一套自己的演算法,可以想成parent class的__init__一定先執行:
#!/usr/bin/python class A(object): def __init__(self): print ("[A]") class A0(A): def __init__(self): super(A0, self).__init__() print ("[A0]") class A1(A): def __init__(self): super(A1, self).__init__() print ("[A1]") class A2(A): def __init__(self): super(A2, self).__init__() print ("[A2]") class A21(A2): def __init__(self): super(A21, self).__init__() print ("[A21]") class A22(A2): def __init__(self): super(A22, self).__init__() print ("[A22]") class B(A1, A21, A22, A0): def __init__(self): super(B, self).__init__() B()結果: (所有class的__init__都被剛好執行一次, 且有parent/child繼承關係parent一定會比child先做)
[A] [A0] [A2] [A22] [A21] [A1]
沒有留言:
張貼留言