小白學(xué)Python之第十三天

八月,你好。好快,七月就過去了。

新的一月,加油干。

本文是學(xué)習(xí)廖雪峰老師的博客的筆記。


使用__slot__

引例:正常情況下,我們可以給實例綁定任何屬性和方法,這體現(xiàn)了動態(tài)語言的靈活性。但在給一個實例綁定方法后,但對于其他實例來說,這個方法,不起作用,所以這時我們給class綁定這個方法,以使所有方法都能調(diào)用。

通常情況下,set_score方法可以直接定義在class中,但動態(tài)綁定允許我們在程序運行的過程中動態(tài)給class加上功能,這在靜態(tài)語言中很難實現(xiàn)。

如果我們想限制實例的屬性,比如,只允許對Student實例添加name和age屬性

為了達到限制的目的,Python中允許在定義class的時候,定義一個特殊的__slots__變量,來限制該class實例能添加的屬性。

由于‘score’沒有被放到__slots__中,所以不能綁定score屬性,試圖綁定將得到一個AttributeError的錯誤。

注意:使用__slots__要注意,__slots__定義的屬性僅對當(dāng)前類實例起作用,對繼承的子類不起作用。除非在子類中也定義__slots__,這樣,子類允許定義的屬性就是自身的__slots__加上父類的__slots__。


使用@property(裝飾器)

引子:在綁定屬性時,如果把屬性直接暴露出來,雖然寫起來簡單,但沒辦法檢查數(shù)據(jù),還容易把成績隨便改。但成績都是有限制的,為了限制score的范圍,可以通過set_score()來獲取成績,在通過一個get_score()來獲取成績,這樣,就可以在set_score()方法里,就可以檢查參數(shù)。如下:

現(xiàn)在就不能隨意的設(shè)置score了。

python一向貫徹簡潔,上述方法有點復(fù)雜,所以這時我們使用裝飾器,裝飾器可以冬天給函數(shù)加上功能,所以這時就用@property裝飾器負(fù)責(zé)把一個方法變成屬性調(diào)用

@property的實現(xiàn)比較復(fù)雜,把一個getter方法變成屬性,只需要加上@property就可以啦,此時,@property本身又創(chuàng)建了另一個裝飾器@score.setter,負(fù)責(zé)把一個setter方法變成屬性賦值,于是,我們就擁有一個可控的屬性操作。

此方法是通過getter和setter實現(xiàn)的。

還可以定義只讀屬性,比如只定義getter不定義setter方法就是一個只讀屬性:

上面的birth就是可讀寫屬性,而age就是一個只讀屬性,因為age可以根據(jù)birth和當(dāng)前時間計算出來。

@property廣泛應(yīng)用在類的定義中,可以讓調(diào)用者寫出剪短的代碼,同時保證對參數(shù)進行必要的檢查,這樣,程序運行時就減少了,出錯的可能性。


多重繼承

繼承是面向?qū)ο缶幊痰囊粋€重要方式,因為通過繼承,子類就可以擴展父類的功能。

但是如果一個子類要擁有好多父類的功能,該如何辦那,這時我們可以使用多重繼承,這種設(shè)計通常稱為Mixln。

Mixln的目的就是給一個類增加多個功能,這樣,在設(shè)計類的時候,我們優(yōu)先考慮通過多重繼承來組合多個Mixln的功能,而不是設(shè)計多層次的復(fù)雜的繼承關(guān)系,這樣我們不需要復(fù)雜而龐大的繼承連,只要選擇組合不同的類的功能,就可以快速構(gòu)造出所需的子類了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 要點: 函數(shù)式編程:注意不是“函數(shù)編程”,多了一個“式” 模塊:如何使用模塊 面向?qū)ο缶幊蹋好嫦驅(qū)ο蟮母拍?、屬性?..
    victorsungo閱讀 1,697評論 0 6
  • 定義類并創(chuàng)建實例 在Python中,類通過 class 關(guān)鍵字定義。以 Person 為例,定義一個Person類...
    績重KF閱讀 4,102評論 0 13
  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔,今天18年5月份再次想寫文章,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 3,143評論 2 9
  • 又是一年的高考了,先祝??忌既〉煤玫某煽?,到自己理想中的學(xué)府。加油! 前些天看韓國連續(xù)劇《學(xué)習(xí)之神》,感覺又回到...
    OO碰到OO閱讀 155評論 0 0
  • 我近期最想實現(xiàn)的一個愿望是:兒子德智體全面發(fā)展,成長為一個健康帥氣、自信勇敢、慷慨有愛、學(xué)業(yè)優(yōu)秀的陽光男孩!懷著愉...
    以娟閱讀 170評論 0 1

友情鏈接更多精彩內(nèi)容