class master(object):
def __init__(self):
self.kongfu = "古法煎餅果子配方" # 例項變數,屬性
def make_cake(self): # 例項方法,方法
print("[古法] 按照 <%s> 製作了乙份煎餅果子..." % self.kongfu)
class school(object):
def __init__(self):
self.kongfu = "現代煎餅果子配方"
def make_cake(self):
print("[現代] 按照 <%s> 製作了乙份煎餅果子..." % self.kongfu)
class prentice(school, master): # 多繼承,繼承了多個父類
def __init__(self):
self.kongfu = "貓氏煎餅果子配方"
def make_cake(self):
print("執行子類的__init__方法前,self.kongfu屬性:%s" % self.kongfu)
self.__init__() # 執行本類的__init__方法,做屬性初始化 self.kongfu = "貓氏...."
print("執行子類的__init__方法前,self.kongfu屬性:%s" % self.kongfu)
print("[貓氏] 按照 <%s> 製作了乙份煎餅果子..." % self.kongfu)
# 呼叫父類方法格式:父類類名.父類方法(self)
def make_old_cake(self):
# 不推薦這樣訪問父類的例項屬性,相當於建立了乙個新的父類物件
# print("直接呼叫master類的kongfu屬性:%s" % master().kongfu)
# 可以通過執行master類的__init__方法,來修改self的屬性值
print("執行master類的__init__方法前,self.kongfu屬性:%s" % self.kongfu)
master.__init__(self) # 呼叫了父類master的__init__方法 self.kongfu = "古法...."
print("執行master類的__init__方法後,self.kongfu屬性:%s" % self.kongfu)
master.make_cake(self) # 呼叫父類master的例項方法
def make_new_cake(self):
# 不推薦這樣訪問類的例項屬性,相當於建立了乙個新的父類物件
# print("直接呼叫school類的kongfu屬性:%s" % school().kongfu)
# 可以通過執行school類的__init__方法,來修改self的屬性值
print("執行school類的__init__方法前,self.kongfu屬性:%s" % self.kongfu)
school.__init__(self) # 呼叫了父類school的__init__方法 self.kongfu = "現代...."
print("執行school類的__init__方法後,self.kongfu屬性:%s" % self.kongfu)
school.make_cake(self) # 呼叫父類school的例項方法
# 例項化物件,自動執行子類的__init__方法
damao = prentice()
damao.make_cake() # 呼叫子類的方法(預設重寫了父類的同名方法)
print("--" * 10)
damao.make_old_cake() # 進入例項方法去呼叫父類master的方法
print("--" * 10)
damao.make_new_cake() # 進入例項方法去呼叫父類school的方法
print("--" * 10)
damao.make_cake() # 呼叫本類的例項方法
執行結果:
執行子類的__init__方法前,self.kongfu屬性:貓氏煎餅果子配方
執行子類的__init__方法前,self.kongfu屬性:貓氏煎餅果子配方
[貓氏] 按照 《貓氏煎餅果子配方》 製作了乙份煎餅果子...
--------------------
執行master類的__init__方法前,self.kongfu屬性:貓氏煎餅果子配方
執行master類的__init__方法後,self.kongfu屬性:古法煎餅果子配方
[古法] 按照 《古法煎餅果子配方》 製作了乙份煎餅果子...
--------------------
執行school類的__init__方法前,self.kongfu屬性:古法煎餅果子配方
執行school類的__init__方法後,self.kongfu屬性:現代煎餅果子配方
[現代] 按照 《現代煎餅果子配方》 製作了乙份煎餅果子...
--------------------
執行子類的__init__方法前,self.kongfu屬性:現代煎餅果子配方
執行子類的__init__方法前,self.kongfu屬性:貓氏煎餅果子配方
[貓氏] 按照 《貓氏煎餅果子配方》 製作了乙份煎餅果子...
核心點:無論何時何地,self都表示是子類的物件。在呼叫父類方法時,通過傳遞self引數,來控制方法和屬性的訪問修改。
C 和JAVA中子類父類同名方法呼叫的結果
子類的函式a中呼叫父類的函式b,函式b中呼叫函式c,子類中存在函式c的覆寫函式d,此時父類的方法會去呼叫子類的實現d。將總結放在最前面來說明本文的主旨 多型 建議先讀後面兩部分再讀總結 對於子類來講,在子類的方法中呼叫父類的方法methoda,父類的方法中呼叫了子父類同名的方法,這時methoda本...
C 子類和父類同名成員變數或函式
在c 中子類和父類同名成員時候c 版本不同處理的方式也不同。下面是我使用visual c 2015 update 3的測試結果 測試 如下 include using namespace std class base virtual void print base class public base...
子類函式對父類同名函式的覆蓋
先看一道題 class b void f double const class d public b int main 答案 3個呼叫全部呼叫子類的f void 但由於後兩個不能轉換為void 編譯出錯。void 是可以指向任何型別的指標。c 中,只有int 0可以轉換為指標型,其餘均不可以,所以出...