super() 函數是用于調用父類(超類)的一個方法。
super() 是用來解決多重繼承問題的,直接用類名調用父類方法在使用單繼承的時候沒問題,但是如果使用多繼承,會涉及到查找順序(MRO)、重複調用(鑽石繼承)等種種問題。
MRO 就是類的方法解析順序表, 其實也就是繼承父類方法時的順序表。
示例代碼:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class FooGrandpa(object):
def __init__(self):
self.parent = 'Grandpa'
print('Grandpa init')
def print_name(self, message):
print("Grandpa print_name:", message)
class FooParent(FooGrandpa):
def __init__(self):
super(FooParent, self).__init__()
print('Parent init')
def print_name(self, message):
super(FooParent, self).print_name(message)
print("Parent print_name:", message)
class FooChild(FooParent):
def __init__(self):
# super(FooChild,self) 首先找到 FooChild 的父類(就是類 FooParent),然後把類 FooChild 的對象轉換為類 FooParent 的對象
super(FooChild, self).__init__()
print('chile init')
def print_name(self, message):
super(FooChild, self).print_name(message)
print("child print_name:", message)
print(self.parent)
if __name__ == '__main__':
message = "signal"
fooChild = FooChild()
fooChild.print_name(message)
Grandpa init
Parent init
chile init
'Grandpa print_name:', 'signal'
'Parent print_name:', 'signal'
'child print_name:', 'signal'
Grandpa
參考:
- Python super() 函數