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

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

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


舉例示範如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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())
 
# 《程式語言教學誌》的範例程式
# 檔名:cla20.py
# 功能:示範 Python 程式
# 作者:張凱慶
# 時間:西元 2010 年 12 月


執行結果如下



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


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


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


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


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


內建函數




沒有留言: