|
復習課主要以知識點梳理+一個代碼的練習+問題答疑 # 通過這個復習課,幫助大家鞏固類與對象這個知識點 # 有疑問的同學,在講解中間,助教會留出時間來給大家提問,希望大家遵守一下提問秩序哈~ # 12關、13關我們學習的面向對象編程,是山腰學習中最重要的知識內(nèi)容 # 學習這兩關的目標是 # 1)了解何為對象 2)區(qū)分變量與類屬性,函數(shù)與類方法 3)掌握類的實例化及初始化函數(shù) 4)熟練繼承與子類定制 # 涉及到的難點有: 類的實例化,初始化函數(shù)的改寫,繼承的用法 # 首先我們要知道,什么是面向對象編程 # 面向對象編程就是以對象為中心,將一組對象組成程序。使用于較復雜,尤其需要持續(xù)更新的代碼場景。 # 那么類是什么? # 類,是一個函數(shù)包。類中可以放置函數(shù)和變量,然后類中的函數(shù)可以很方便的使用類中的變量,(也就是類方法可以調用類屬性) # 類中的 函數(shù) 叫 ‘方法’,類中的 變量 叫 ‘屬性’(就不要再說函數(shù)和變量了,要說類方法和類屬性) # # 那么,方法和屬性我們知道了,那什么是參數(shù)呢? # 參數(shù)是,我們在定義函數(shù)的時候,需要傳遞給類方法的東西 # 我們舉個例子 # # 在這里的代碼中,我們在定義函數(shù)的時候,留了一個需要手動傳遞參數(shù)的位置 # 所以在調用類方法的時候,需要手動設置一個參數(shù) # 如果沒有設置參數(shù),或者參數(shù)設置多了,都會報錯 # 但有一種情況可以不手動設置參數(shù) # 那就是在定義方法的時候,將需要的參數(shù)設置為默認參數(shù) # # 這里有沒有疑問的同學呢? # 我們繼續(xù) # 在同一個類里面,不同方法之間,還可以實現(xiàn)方法的調用 # 舉個栗子 # # 在方法 live()中,就調用了方法 born() # 順著這個例子,我們接著講到,類的實例化是什么?實例怎么使用? # 類是對象的模板,可以復制出多個對象,這個過程叫實例化 # 格式 : 實例名=類名() # # 這里要注意,類實例化的時候,類的括號不能丟 # 被創(chuàng)造出來的實例與類一模一樣,但是它是獨立的對象 # 調用類屬性和類方法的格式分別為: 調用類的屬性:實例名.屬性; 調用類的方法:實例名.方法() # 這里給大家展示一下例子 # # 這個例子屬于,在類外部調用類的屬性 # 我們用print語句將my_computer這個實例的screen這個屬性打印出來 # 屬性可以在外部調用,也可以在類的內(nèi)部調用 # 當在類的方法內(nèi)部想調用類屬性或其他方法時,就要采用self.屬性名或self.方法名的格式。(相當于改變了作用域) # # 有同學問,為什么實例調用方法時不用傳參,定義時不是有個參數(shù)self嗎? # 這就是參數(shù)self的特殊之處:在定義時不能丟,在調用時要忽略 # self的作用是,self會接收實例化過程中傳入的數(shù)據(jù),當實例對象創(chuàng)建后,實例便會代替 self,在代碼中運行 # 通俗一點理解,只要記住,加上self.前綴的類屬性和類方法,準確來說叫實例屬性和,可以在類下的不同類方法中實現(xiàn)調用 # 那么,實例的對象,和類之間有什么聯(lián)系呢 # 首先,實例屬性和類屬性: 1)修改類屬性,這會導致所有實例屬性變化(因為類是模板); 2)修改實例屬性,但這不會影響到其他實例,也不會影響到類。因為每個實例都是獨立的個體。 # 其次,實例方法和類方法: 1)重寫類方法,這會導致所有實例方法自動被重寫; 2)實例方法不可重寫 # # 到這一步為止,有沒有疑問呢 # 繼續(xù) # 初始化函數(shù) # 初始化函數(shù)(方法),也叫構造函數(shù),它的意思是,當你創(chuàng)建一個實例的時候,這個函數(shù)就會被調用。 # 初始化函數(shù)的寫法是固定的格式:中間是“init”,這個單詞的中文意思是“初始化”,然后前后都要有【兩個下劃線】,然后__init__()的括號中,第一個參數(shù)一定要寫上self,不然會報錯 # 也就是寫成def __init__(self): # # 我們一般會用初始化函數(shù)來做什么呢? # 在初始化方法內(nèi)部完成類屬性的創(chuàng)建,為類屬性設置初始值,這樣類中的其他方法就能直接、隨時調用。不需要再調用__init__() # 舉個栗子 # # 在這個類中,一旦調用,就會執(zhí)行初始化函數(shù)創(chuàng)建類屬性 # 在初始化函數(shù)的定義時,也可以設置需要傳遞的參數(shù)位置 # 在實例化類的時候,可直接手動傳入?yún)?shù) #
# 繼續(xù)講最后一個知識,類的繼承 # 類的繼承很大程度也是為了避免重復性勞動。比如說當我們要寫一個新的類,如果新的類有許多代碼都和舊類相同,又有一部分不同的時候,就可以用“繼承”的方式避免重復寫代碼; # 同理,在類的繼承后,子類重寫初始化函數(shù)時調用父類的初始化函數(shù),也是因為許多代碼都和舊類相同,又有一部分不同的時候,就可以用調用的方式避免重復寫代碼; # 子類創(chuàng)建的實例,同時屬于父類 父類創(chuàng)建的實例,不屬于子類; #
# 這個例子屬于類的定制和調用,能夠理解這個代碼,其實對于類的繼承最核心的知識就掌握了 # 子類會自動擁有父類的屬性和方法,子類不需要顯示寫出來,顯示寫的方法叫重寫方法,即名字與父類的方法名相同,函數(shù)參數(shù)也相同則父類的方法被重寫 #
# 就是很多人常問的課程上的題目,這里為什么要加book.__init__ # 這里就是重寫了方法,如果你已經(jīng)繼承父類的方法,但是子類又重新寫了初始化函數(shù),那么就屬于重寫,要重寫就要在下一行加入父類.__init__(self,xx)這樣的格式 # 在Python中,子類如果定義了構造函數(shù),而沒有調用父類的,那么Python不會自動調用,也就是說父類的構造函數(shù)不會執(zhí)行 # 如果子類沒有定義自己的初始化函數(shù),父類的初始化函數(shù)會被默認調用;但是如果要實例化子類的對象,則只能傳入父類的初始化函數(shù)對應的參數(shù),否則會出錯。 # Python支持多繼承,如果多個繼承類都重寫了相應屬性和方法,則按就近原則繼承屬性和行為,這里的就近就是C1。如下圖所示:
|
|
|
來自: Four兄 > 《Python筆記》