網頁

2015年7月2日 星期四

[Python] old style class vs new style class

目的: 了解什麼是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]

沒有留言:

張貼留言