1本文的意義 如果給已經存在的類添加新的行為,採用繼承方案 如果改變已經存在類的行為,採用重寫方案 2圖解繼承、重寫與Super 註:上面代碼層層關聯。super()可以用到認可方法里調用,本文只用在了__init__方法中,通過重寫和調用super,可以修改所有方法。 上面類的實例化: 3代碼驗證 ...
1本文的意義
如果給已經存在的類添加新的行為,採用繼承方案
如果改變已經存在類的行為,採用重寫方案
2圖解繼承、重寫與Super
註:上面代碼層層關聯。super()可以用到任何方法里進行調用,本文只用在了__init__方法中,通過重寫和調用super,可以修改所有方法。
上面類的實例化:
3代碼驗證
class ContactList(list): def search(self, name): matching_contacts = [] for contact in self: if name in contact.name: matching_contacts.append(contact) return matching_contacts class Contact: all_contacts = ContactList() def __init__(self, name, email): self.name = name self.email = email self.all_contacts.append(self) class Friend(Contact): def __init__(self, name, email, phone): super().__init__(name, email) self.phone = phone contact1 = Contact("Zhang San", "[email protected]") contact2 = Contact("Li Si", "[email protected]") contact3 = Contact("WangWu", "[email protected]") myFriend1 = Friend("LiLi", "[email protected]", 666666) myFriend2 = Friend("YueYue", "[email protected]", 888888) In [1]: Contact.all_contacts # 列表記錄了實例化的5個對象 [<__main__.Contact at 0x22d6a877048>, <__main__.Contact at 0x22d6a871fd0>, <__main__.Contact at 0x22d6a877080>, <__main__.Friend at 0x22d6a8770b8>, <__main__.Friend at 0x22d6a877160>] In [2]: [c.name for c in Contact.all_contacts.search('Li')] ['Li Si', 'LiLi']
參考:本文參考學習《Python3 Object Oriented Programming》,根據自己理解改編,Dusty Phillips 著