【Python 教學】OOP 繼承/封裝/多型基本用法Example - 測試先生

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

【Python 教學】OOP 繼承/封裝/多型基本用法Example. 文章更新日期: 2022 年6 月30 日. Facebook Line Share. 學習物件導向的原因是因為它可以使得程式更容易維護以及 ... 跳至主要內容跳至主要資訊欄跳至頁尾目前位置:首頁/Python應用/Python基礎操作/【Python教學】OOP繼承/封裝/多型基本用法Example學習物件導向的原因是因為它可以使得程式更容易維護以及擴充套件,並且可以提高程式開發效率以及使人更容易閱讀理解程式碼的邏輯。

如果前一個人離職沒有透過物件導向來設計整個架構流程的話,相信你一定會閱讀的很辛苦。

物件導向有幾個特色:繼承(inheritance)、封裝(encapsulation)、多型(polymorphism)繼續往下閱讀可以知道這三個該如何操作以及使用。

內容目錄Python繼承(inheritance)Python繼承基本用法(inheritance)examplePython方法覆蓋(Methodcoverage)examplePython多重繼承寫法Python封裝(encapsulation)Python封裝(Encapsulation)examplePython私有屬性(PrivateAttribute)examplePython私有方法(PrivateMethod)examplePython多型(polymorphism)example更多技術文章Python繼承(inheritance)繼承(Inheritance),聽到這個名詞基本上就是像繼承家裡的財產或是事業個感覺也就是說在程式裡面會有一個父親的類別(BaseClass)以及子類別(SubClass)子類別是可以擁有父類別公開的屬性(Attribute)以及方法(Method),使用繼承(Inheritance),可以降低程式碼的重複性。

繼承(Inheritance)會分為三種實作方式給各位作為參考:繼承基本用法(inheritance)方法覆蓋(Methodcoverage)多重繼承(Multi-LayerInheritance)Python繼承基本用法(inheritance)example如何使用繼承(inheritance)的寫法呢?DisplayNameAge為父類別(Baseclass),EnterNamAge為子類別(Subclass)透過第12行,子類別透過()的方式繼承了父類別,並且在第18行,將子類別取得到的參數回傳給父類別。

子類別就可以使用父類別的公開屬性以及方法,在第28行透過子類別直接呼叫父類別的方法呈現可以參考下方的程式碼classDisplayNameAge:#Baseclass #建構子 def__init__(self,n,a): self.name=n self.age=a #顯示名稱以及年齡的方法 defname_age_display(self): print("你的名字是:",self.name) print("你的年齡:",self.age) classEnterNameAge(DisplayNameAge):#Subclass #建構子 def__init__(self): self.x=input("請輸入你的名字") self.y=input("請輸入你的年齡") DisplayNameAge.__init__(self,self.x,self.y) display_info=EnterNameAge() """ 輸入資料 #請輸入你的名字mark #請輸入你的年齡18 """ display_info.name_age_display() """ 輸出結果 你的名字是:mark 你的年齡:18 """ Python方法覆蓋(Methodcoverage)example父類別(Baseclass)與子類別(Subclass)的方法有重複的話,再呼叫同名的方法時,會將父類別的方法(Method)給覆蓋只會直接子類別的方法(name_age_display)參考下方程式碼範例classDisplayName: def__init__(self,n,a): self.name=n self.age=a defname_age_display(self): print("你的名字是:",self.name) print("你的年齡:",self.age) classEnterNameAge(DisplayName): def__init__(self): self.x=input("請輸入你的名字") self.y=input("請輸入你的年齡") DisplayName.__init__(self,self.x,self.y) defname_age_display(self): print("dataerror...") display_info=EnterNameAge() """ 輸入資料 請輸入你的名字>?mark 請輸入你的年齡>?100 """ display_info.name_age_display() """ 輸出結果 dataerror... """Python多重繼承寫法多重繼承是甚麼概念呢?我認知是一個子類別(subclass)繼承了多個父類別(baseclass)另外一個說法就是一個兒子有多個父親,可以獲取到父親的所有屬性以及方法。

要如何讓一個子類別繼承多個父類別呢?第16行的()透過,來區分可以繼承多個父類別,並且透過第21,22行來獲取父類別的屬性。

接著我們執行25行,呼叫子類別EnterNameAgeNumber(),這時會去執行第17行,需要input相關資訊最後會將資料全部分配到對應的父類別的屬性內,最後再去執行父類別底下的方法參考下方程式碼範例classDisplayName: def__init__(self,n,a): self.name=n self.age=a defname_age_display(self): print("你的名字是:",self.name) print("你的年齡:",self.age) classDisplayNumber: def__init__(self,n): self.number=n defnumber_display(self): print("你的電話號碼:",self.number) classEnterNameAgeNumber(DisplayName,DisplayNumber): def__init__(self): self.x=input("請輸入你的名字") self.y=input("請輸入你的年齡") self.z=input("請輸入你的電話號碼") DisplayName.__init__(self,self.x,self.y) DisplayNumber.__init__(self,self.z) display_info=EnterNameAgeNumber() """ 輸入資料 請輸入你的名字>?mark 請輸入你的年齡>?1000 請輸入你的電話號碼>?09xx """ display_info.name_age_display() """ 輸出結果 你的名字是:mark 你的年齡:1000 """ display_info.number_display() """ 輸出結果 你的電話號碼:09xx """ Python封裝(encapsulation)此章節介紹封裝(Encapsulation)要如何編寫以及私有屬性(PrivateAttribute)以及私有方法(PrivateMethod),就讓我們繼續往下看吧!Python物件導向中的其中一個封裝(Encapsulation)是什麼呢?簡單來說會隱藏程式重要的程式碼實際的細節,不會被外部知道如何操作,只保留街口,使得程式碼模組化,也比較容易維護。

如果外部程式想要取得到封裝程式碼內的屬性(Attribute)以及方法(Method),是會導致程式上發生錯誤。

用白話文來說的話,像是你搭捷運用的悠遊卡,只需要靠近感應機會自動扣款,你不必須要知道背後的細節在做什麼,這功能就是所謂的封裝(Encapsulation)。

Python封裝(Encapsulation)example下方的my_number()、Info.name為一個封裝的表現,可以讓外部直接使用,不必須要考慮到內部的實作而直接呼叫。

Info.age則是透過外部給予參數的方式來呈現,一般來說都會使用公開的屬性(Attribute)以及方法(Method)參考下方的程式碼範例classPersonalInfo: #初始化函數 def__init__(self): self.name='mark'#我的名字 self.age=0#我的年齡 #取得使用者賦予的年齡數值 defmy_age(self,age): self.age=age defmy_number(self): print('09XX-XXX-XXX') Info=PersonalInfo() Info.my_age(30) print('我的名稱:'+Info.name) print('我的年齡:'+str(Info.age)) Info.my_number() """ 輸出結果 我的名稱:mark 我的年齡:30 09XX-XXX-XXX """Python私有屬性(PrivateAttribute)example私有屬性如何使用以及如何不讓外部存取呢?使用方法其實簡單只要在你不想給外部存取的屬性前面加上__就可以,參考下方的self.__name的使用方法classPersonalInfo: #初始化函數 def__init__(self): self.__name='mark'#我的名字加上私有屬性(PrivateAttribute) self.age=0#我的年齡 #取得使用者賦予的年齡數值 defmy_age(self,age): self.age=age defmy_number(self): print('09XX-XXX-XXX') Info=PersonalInfo() Info.my_age(30) print('我的年齡:'+str(Info.age)) print('我的名稱:'+Info.__name)#印出導致 """ 輸出結果 我的年齡:30 Traceback(mostrecentcalllast): File"",line18,in AttributeError:'PersonalInfo'objecthasnoattribute'__name' """從上方的程式碼輸出的結果可以看得出來,外部是無法取得到__name的屬性,但可以取得到age的屬性Python__dict__取得私有屬性(PrivateAttribute)但Python有其他的方法可以取得到已經變成私有屬性的方法,可以透過dict查看類別中的屬性參考下方程式碼範例classPersonalInfo: #初始化函數 def__init__(self): self.__name='mark'#我的名字加上私有屬性(PrivateAttribute) self.age=0#我的年齡 #取得使用者賦予的年齡數值 defmy_age(self,age): self.age=age defmy_number(self): print('09XX-XXX-XXX') Info=PersonalInfo() print(Info.__dict__) print(Info._PersonalInfo__name) """ 輸出結果 {'_PersonalInfo__name':'mark','age':0} mark """Python私有方法(PrivateMethod)example從上方的私有屬性得知要在前面加上就能輕鬆把公共屬性變成私有屬性,那私有方法與私有屬性是一樣的方法也是說把加入到Method前參考下方程式碼範例classPersonalInfo: #初始化函數 def__init__(self): self.name='mark'#我的名字 self.age=0#我的年齡 #取得使用者賦予的年齡數值 defmy_age(self,age): self.age=age def__my_number(self):#將此公共方法改為了私有方法 #我的電話號碼 print('09XX-XXX-XXX') defmy_birthday(self): #我的生日 print('1990230') Info=PersonalInfo() Info.my_birthday() Info.__my_number() """ 輸出結果 1990230 Traceback(mostrecentcalllast): File"",line23,in AttributeError:'PersonalInfo'objecthasnoattribute'__my_number' """Python多型(polymorphism)example多行簡單來說就是透過呼叫同名稱的方法時,會得到不同的結果。

如下面程式碼範例Food、Mark、Joy這三個類型都同時擁有breakfast的方法但是呼叫eat.breakfast()、e1.breakfast()、e2.breakfast()卻有不同的表現主要是因為Python會根據呼叫的類別來決定要執行哪一個方法來實作多型是指方法的多行並不是指屬性的多型(屬性也沒有多型)classFood: defbreakfast(self): print('breakfast') classMark(Food): defbreakfast(self): print('Markeatbreakfast') classJoy(Food): defbreakfast(self): print('Joyeatbreakfast') eat=Food() e1=Mark() e2=Joy() eat.breakfast() e1.breakfast() e2.breakfast() """ 輸出結果 breakfast Markeatbreakfast Joyeatbreakfast """文章內的程式碼都可以直接複製下來練習操作,或是直接套用到自己的專案都行!多練習,對自已會有很大的幫助!一回生二回熟,將所學習到內容變成自己的知識。

人就是要學習自己不會的事情,這樣才會不斷的成長、進步!更多技術文章透過下方按鈕找尋到相關的技術文章,希望可以幫助到正在學習的你html教學文章Python教學文章Ngrok教學Jenkins教學WordPress教學Chatbot教學加入到我的粉絲專頁,不定期發布最新文章資訊!有任何文章問題都可以詢問喔!測試先生主要資訊欄Searchthesite...電子郵件FacebookGitHubLinkedInPython繼承(inheritance)Python繼承基本用法(inheritance)examplePython方法覆蓋(Methodcoverage)examplePython多重繼承寫法Python封裝(encapsulation)Python封裝(Encapsulation)examplePython私有屬性(PrivateAttribute)examplePython私有方法(PrivateMethod)examplePython多型(polymorphism)example更多技術文章Footer電子郵件FacebookGitHubLinkedIn



請為這篇文章評分?