Python 3.1 快速導覽 - 內建函數 super()

內建函數 (function) super() ,用為呼叫父類別定義的方法

函數描述
super([type[, object-or-type]])用為呼叫父類別定義的方法


舉例示範如下
class Demo:
    __x = 0

    def __init__(self, i):
        self.__i = i
        Demo.__x += 1
    
    def __str__(self):
        return str(self.__i)
         
    def hello(self):
        print("hello " + self.__str__())
    
    @classmethod 
    def getX(cls):
        return cls.__x

class SubDemo(Demo):
    def __init__(self, i, j):
        super().__init__(i)
        self.__j = j
    
    def __str__(self):
        return super().__str__() + "+" + str(self.__j)


a = SubDemo(12, 34)
a.hello()
print("a.__x =", a.getX())
b = SubDemo(56, 78)
b.hello()
print("b.__x =", b.getX())
print()
print("a.__x =", a.getX())
print("b.__x =", b.getX())

# 《程式語言教學誌》的範例程式
# http://pydoing.blogspot.com/
# 檔名:cla20.py
# 功能:示範 Python 程式 
# 作者:張凱慶
# 時間:西元 2010 年 12 月 


執行結果如下



第 19 行到第 21 行
def __init__(self, i, j):
    super().__init__(i)
    self.__j = j


SubDemo 的 __init__() 定義中,我們利用 super() 呼叫父類別 Demo 的 __init__() ,因此需提供 i 當作參數 (parameter) 。注意,這裡 self.__i 變成父類別的私有屬性。


第 23 行到第 24 行
def __str__(self):
    return super().__str__() + "+" + str(self.__j)


這裡的 __str__() ,在 return 後的運算式 (expression) 先呼叫 super().__str__() ,因為 self.__i 已經變成父類別 Demo 私有屬性,因此需要先呼叫父類別的 __str__() 。


中英文術語對照
函數function
參數parameter


內建函數




沒有留言: