現(xiàn)在都流行面前對(duì)象編程。文字介紹可能看得很暈,看不懂和不理解當(dāng)然看得暈,不用怕,慢慢看到最后你會(huì)有所收獲。
python新手學(xué)習(xí)面向?qū)ο蠡咎卣鳎?/strong> 在Python中,定義類是通過class關(guān)鍵字,class后面緊接著是類名,即ClassName,類名通常是大寫開頭的單詞。我喜歡駝峰式寫法首字母都大寫。 定義類: 第一種類名后面直接跟冒號(hào)。 第二種類名后面跟小括號(hào)再冒號(hào)。 第三種類名后面括號(hào)中object再跟冒號(hào)。 三種的關(guān)系:第一種和第二種程序會(huì)默認(rèn)就是第三種,第一種和第二種只是簡(jiǎn)寫。如果沒有繼承自定義的類,就可以這樣寫。 如果要繼承自定義的類就不能夠簡(jiǎn)寫。(object),表示該類是從哪個(gè)類繼承下來的,繼承的概念我們后面再講,通常,如果沒有合適的繼承類,就使用object類,這是所有類最終都會(huì)繼承的類。 比如你有個(gè)類叫object1,你想繼承object1,你用簡(jiǎn)寫就直接繼承程序默認(rèn)的object。 方法:事實(shí)它就是一個(gè)函數(shù),只不過在類中定義的時(shí)候叫方法。 屬性:事實(shí)它就是一個(gè)變量,只不過在類中定義的時(shí)候叫屬性和有點(diǎn)不同。 構(gòu)造函數(shù):__init__()該方法在類實(shí)例化時(shí)會(huì)自動(dòng)調(diào)用,又叫初始化方法。 其中構(gòu)造方法有兩個(gè)參數(shù)(id 和 age),self.id和self.age就是兩個(gè)屬性。 實(shí)例化對(duì)象: 創(chuàng)建多一個(gè)方法output(),打印構(gòu)造函數(shù)的屬性。 創(chuàng)建實(shí)例: 輸出結(jié)果: self代表類的實(shí)例,而非類 類的方法與普通的函數(shù)只有一個(gè)特別的區(qū)別: 在類地內(nèi)部,使用 def 關(guān)鍵字來定義一個(gè)方法,與一般函數(shù)定義不同,類方法必須包含參數(shù)self,且為第一個(gè)參數(shù),self代表的是類的實(shí)例。 self的名字并不是規(guī)定死的,也可以使用this,但是最好還是按照約定是用self。 self就是實(shí)例化op自身,其中self.name可以等同op.name。 以后再創(chuàng)建一個(gè)xh= ClassName('小紅',18),這個(gè)時(shí)候self就是xh。 注意點(diǎn): 注意到__init__方法的第一個(gè)參數(shù)永遠(yuǎn)是self,表示創(chuàng)建的實(shí)例本身,因此,在__init__方法內(nèi)部,就可以把各種屬性綁定到self,因?yàn)閟elf就指向創(chuàng)建的實(shí)例本身。 有了__init__方法,在創(chuàng)建實(shí)例的時(shí)候,就不能傳入空的參數(shù)了,必須傳入與__init__方法匹配的參數(shù),但self不需要傳,Python解釋器自己會(huì)把實(shí)例變量傳進(jìn)去。 類屬性與方法 類的私有屬性 __private_attrs:兩個(gè)下劃線開頭,聲明該屬性為私有,不能在類的外部被使用或直接訪問。在類內(nèi)部的方法中使用時(shí)self.__private_attrs。 類的私有方法 __private_method:兩個(gè)下劃線開頭,聲明該方法為私有方法,只能在類的內(nèi)部調(diào)用 ,不能在類地外部調(diào)用。self.__private_methods。 繼承:Python 同樣支持類的繼承,如果一種語言不支持繼承,類就沒有什么意義。 在OOP程序設(shè)計(jì)中,當(dāng)我們定義一個(gè)class的時(shí)候,可以從某個(gè)現(xiàn)有的class繼承,新的class稱為子類(Subclass),而被繼承的class稱為基類、父類或超類(Base class、Super class)。 繼承和方法重寫: 定義一個(gè)People人類,用Student學(xué)生類繼承People人類。 如果你的父類方法的功能不能滿足你的需求,你可以在子類重寫你父類的方法。子類只需要寫一個(gè)跟父類相同的方法(函數(shù))就可以覆蓋重寫。 輸出結(jié)果: 總結(jié)概論: class關(guān)鍵字后面跟類名,繼承就在小括號(hào)里面輸入需要繼承的類名。 __init__()構(gòu)造函數(shù)該方法在類實(shí)例化時(shí)會(huì)自動(dòng)調(diào)用。比如你從外面回來要進(jìn)家之前要用鑰匙開門,這個(gè)步驟就是初始化。 __del__() 析構(gòu)函數(shù),釋放對(duì)象時(shí)使用。比如你每次鎖門要出去,析構(gòu)函數(shù)默認(rèn)你鎖上門就完了。突然有一次抽風(fēng)對(duì)門說:芝麻關(guān)門。析構(gòu)函數(shù)就是程序執(zhí)行完之前要做的最后一件事。 self的名字并不是規(guī)定死的,也可以使用this,但是最好還是按照約定是用self。 子類方法和父類方法相同,子類方法會(huì)覆蓋父類方法。 繼承用個(gè)例子說: 定義一個(gè)商場(chǎng)類和一個(gè)人類,人類繼承商場(chǎng)類。 實(shí)例化對(duì)象: 輸出結(jié)果: 分析例子: 商場(chǎng)類中有兩個(gè)方法分別是買和賣。人類中只有一個(gè)go()方法。人類繼承商場(chǎng)類中兩個(gè)方法。所以后面的實(shí)例化對(duì)象中都是人類People(): xm.buy()是父類的商場(chǎng)類的方法,由于繼承的關(guān)系,所以可以直接使用。 xh.go()是人類People()中本身方法。 xh.sell()是父類的商場(chǎng)類的方法,由于繼承的關(guān)系,所以可以直接使用。 基礎(chǔ)的面向?qū)ο竽軌蛄私猓憾x類、構(gòu)造函數(shù)、方法、屬性、私有化、方法重寫、繼承這幾點(diǎn)就算入門,其實(shí)還有很多高級(jí)的用法。再python深入學(xué)習(xí)中逐漸掌握。 |
|