目的: 了解什麼是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]
沒有留言:
張貼留言