Python中多繼承與super()用法
阿新 • • 發佈:2019-02-01
Python類分為兩種,一種叫經典類,一種叫新式類。兩種都支援多繼承。
考慮一種情形,B繼承於A,C繼承於A和B, 但C需要呼叫父類的init()函式時,前者會導致父類A的init()函式被呼叫2次,這是不希望看到的。而且子類要顯式地指定父類,不符合DRY原則。
# 經典類 class A(): def __init__(self): print 'A' class B(A): def __init__(self): A.__init__(self) print 'B' class C(B, A): def __init__ |
採用新式類,要求最頂層的父類一定要繼承於object
,這樣就可以利用super()函式來呼叫父類的init()等函式,每個父類都執行且執行一次,並不會出現重複呼叫的情況。而且在子類的實現中,不用到處寫出所有的父類名字,符合DRY原則。
# 新式類 class A(object): def __init__(self): print 'A' class B(A): def __init__(self): super(B, self).__init__() |
採用super()方式時,會自動找到第一個多繼承中的第一個父類,但是如果還想強制呼叫其他父類的init()函式或兩個父類的同名函式時,就要用老辦法了。
class Person(object): name = "" sex = "" def __init__(self, name, sex='U'): print 'Person' |