天天看點

Python super() 函數

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
      

參考:

  1. ​​Python super() 函數​​