重寫與super
如果想繼承聯絡人的朋友類的初始化方法中新增乙個phone的預設值怎麼辦呢?則需要用到重寫(任何方法都可以重寫),在子類中,方法名相同,引數不同即可。
pythonclass contactlist(
list):
defsearch
(self,name)
:"返回所有符合名字的類"
matching_contacts=
for contact in self:
if name in contact.name:
return matching_contacts
class
contact
:"""建立乙個聯絡人的類用類變數維護一系列聯絡人資訊"""
all_contacts=contactlist(
)def
__init__
(self,name,email)
: self.name=name
self.email=email
class
friend
(contact)
:"繼承自聯絡人類的朋友類"
def__init__
(self,name,email,phone)
:"重寫初始化方法"
self.name = name
self.email = email
self.phone=phone
那麼,在子類中聯絡人的類變數all_contacts是否可以更新呢?
a=friend(
"cheng"
,"cheng123.com"
,"cheng"
)print
(a.all_contacts)
結果顯示列表為空,因為:
python的方法是不能想靜態物件導向一樣那樣過載,當有多個同名方法存在時,會預設呼叫最後乙個方法。
一篇關於python方法是否可以靜態過載的驗證部落格
所以,既然首先呼叫最後乙個方法,那麼,也就是父類的初始化方法無法被呼叫
所以,繼承自父類的靜態變數列表也無法更新
因此若要解決這個問題就是解決如何可以呼叫父類初始化方法的問題,這時用到了super()
class
friend
(contact)
:def
__init__
(self,name,email,phone)
:super()
.__init__(name,email)
"用super獲取父類物件的例項,然後呼叫它的__init__方法,傳入預期的引數"
self.phone=phone
"最後設定phone的值,執行自己的初始化過程"
a=friend(
"cheng"
,"cheng123.com"
,"cheng"
)print
(a.all_contacts)
[<__main__.friend object at 0x0000018ea4008f28
>
]"列表正常更新"
這意味著,所有的方法均可以通過重寫和呼叫super進行修改,在方法的任意位置都有可以呼叫super. Python3物件導向 2 繼承(2)
擴充套件內建物件 向內建型別新增新功能是繼承關係的有趣應用。class contactlist list defsearch self,name 返回所有符合名字的類 matching contacts for contact in self if name in contact.name retu...
python3物件導向
類 class 描述同屬性和方法的物件的集合。方法 類中定義的函式 例項化 建立乙個類的例項,類的具體物件。物件 通過類定的資料例。包括兩個資料成員 類變數和例項變數 和方法。支援操作 屬性引用和例項化 class myclass i 12345 deff self return hello wor...
Python3 物件導向
類名 這類事物的名字,滿足大駝峰命名法,每乙個單詞的首字母大寫 屬性 這類事物具有什麼樣的特徵,身高,體重,年齡等 方法 這類事物具有什麼樣的行為,會跑,會說話,會跳等 class cat 名字貓的類,建議用大駝峰 def init self,new name,new age self.name n...