用super 來讓父系幫助你· Introducing python - iampennywu

文章推薦指數: 80 %
投票人數:10人

只要說super(). >>> class 父類別名稱(): def __init__(self, name): self.name = name # 注意以下「子類別」內的__init__() 呼叫式有新的「email 參數」 # 當為類別 ... Introducingpython Introduction Chapter1初嘗Py Chapter2Py食材:數字、字串與變數 變數、名稱與物件 數字 字串 內建字串函式 Chapter3Py填充:串列、Tuple、字典及集合 串列 串列函式 Tuple 字典 字典函式 集合 資料結構 Chapter4Py之殼:程式結構 if、elif、else 生成式 函式引數 函式 產生器 裝飾器 命名空間與範圍 使用try與except來處理錯誤 製作你自己的例外 Chapter5Py盒子:模組、套件與程式 模組與import陳述式 套件 Python標準程式庫 Chapter6Py喔喔:物件與類別 用class來定義類別 繼承 覆寫方法 添加方法 用super來讓父系幫助你 self防衛 使用特性來取得屬性值與設定它 搞砸私用名稱 方法類型 DuckTyping 特殊方法 組合 使用類別與物件V.S.模組的時機 PoweredbyGitBook 用super來讓父系幫助你 讓父系幫助你【使用super】 之前看過子類別如何添加或覆寫父類別的方法 【範例一】如果想要呼叫父類別的方法時,該怎麼辦?只要說super() >>>class父類別名稱(): def__init__(self,name): self.name=name #注意以下「子類別」內的__init__()呼叫式有新的「email參數」 #當為類別定義__init__()方法時,代表要用它來取代父類別的__init__()方法→再也不會自動呼叫父類別的__init__()方法,所以必須明確地呼叫它 #__init__()方法呼叫「父類別.__init__()」方法→負責將self引數傳給父類別,所以只要提供選用的引數給它就行了→此範例:父類別名稱()收到的其他引數只有name >>>class子類別名稱(父類別名稱): def__init__(self,name,email): super().__init__(name)#super()取得父類別的定義 self.email=email#self.email=email,這一行是新的程式→就是因為它,才讓「子類別」與「父類別」有所差異 #接著,來製作其中一個物件 >>>文字=子類別名稱('字串1','字串2') #可以存取name與email屬性 >>>文字.name 字串1 >>>文字.email 字串2 #首先,是我們熟悉的Person定義 >>>classPerson(): def__init__(self,name): self.name=name #接著,要定義一個名為EmailPerson的新類別,它代表Person與email地址 #當為類別定義__init__()方法時,代表要用它來取代父類別的__init__()方法→再也不會自動呼叫父類別的__init__()方法,所以必須明確地呼叫它 #super()取得父類別Person的定義 #__init__()方法呼叫「Person.__init__()」方法→負責將self引數傳給父類別,所以只要提供選用的引數給它就行了→此範例:Person()收到的其他引數只有name >>>classEmailPerson(Person): def__init__(self,name,email):#注意子類別內的__init()__()呼叫式有新的email參數 super().__init__(name) self.email=email#self.email=email,這一行是新的程式→就是因為它,才讓EmailPerson與Person有所差異 #接著,來製作其中一個物件 >>>bob=EmailPerson('BobFrapples','[email protected]') #可以存取name與email屬性 >>>bob.name 'BobFrapples' >>>bob.email '[email protected]' 【範例二】這種做法也可以,但會破壞繼承的使用 >>>class子類別名稱(父類別名稱): def__init__(self,name,email): self.name=name self.email=email >>>classEmailPerson(Person): def__init__(self,name,email): self.name=name self.email=email 為什麼不像這樣定義新類別就好? →這種做法也可以,但是它會破壞繼承的使用 使用super()好處 *使用super()來讓「父類別Person」做它的工作,與一般的「父類別Person物件」做的事情一樣 *如果以後「父類別Person」的定義被改變了,使用super()可確保「子類別EmailPerson」從「父類別Person」繼承來的屬性與方法,可以反應它的改變 *如果「子類別」會使用它自己的方法來做事,但仍然需要用到「父類別」的東西,請使用super() resultsmatching"" Noresultsmatching""



請為這篇文章評分?