python3之面向對象編程理解


面向對象主要有三個特征:封裝,繼承,多態度。

一.封裝

定義類語


class Animal():

class為定義類的關鍵字,后面跟名字():

python命名規范建議:類一般首字母單詞大寫,屬性變量,函數首單詞字母小寫


定義一個類叫Animal,相關代碼:
class Animal():
    ##類里定義的屬性稱為類屬性
    count=0
    ##構造函數,實例化的時候會自動調用該函數
    def __init__(self,name,age,sex):
        ##構造函數里定義的字段稱為實例屬性
        self.name=name
        self.age=age
        self.sex=sex

        print('名字叫:'+self.name+',年齡'+str(self.age)+'歲,性別品種是:'+self.sex)
        print('當前動物數量:'+str(self.__class__.count))

if __name__ == '__main__':
    ##實例化Animal
    a1=Animal('獅子',2,'')

 

這里name,age,sex為實例屬性,通過類在實例化的時候賦值,count為類屬性,可通過類名.屬性名的方式賦值

 

上面代碼運行結果:

這里來改寫下代碼,在構造函數里加上代碼:

self.__class__.count+=1

 

運行結果:

 

1.1類屬性和類實例屬性

 這里發現類屬性count字段存儲的數據是全局,每次實例化對象的時候值都是在之前基礎上相加,而沒有被銷毀。

類屬性和類實例屬性最大的區別就是:

類屬性字段的值不會因為類的實例化而丟失,是全局保存的

類實例屬性:只有每次實例化類對象賦值的時候才有值,不是全局保存的。

查看解釋器里生成的雷屬性代碼;類名.__dict__

1.2類函數

語法: def detail_info(self):

def 后面跟函數名稱,self為必須函數,這里也可能用別的名稱,但為了命名統一,這里推薦用self

改寫后方法:

 實例化對象可直接調用

1.3,私有屬性,函數

在Java和c#里私有,公有都用private,public表示,但在python里沒有這兩個關鍵字,python里在屬性或者函數名加__表示私有,則只能在類的內部訪問,其他地方則無法訪問

將函數detail_info改為私有私有函數

 

運行結果

 

發現這里提示找不到__detail_info函數,這里就表示私有函數起作用了

實例方法

    定義:第一個參數必須是實例對象,該參數名一般約定為“self”,通過它來傳遞實例的屬性和方法(也可以傳類的屬性和方法);

    調用:只能由實例對象調用。

類方法

    定義:使用裝飾器@classmethod。第一個參數必須是當前類對象,該參數名一般約定為“cls”,通過它來傳遞類的屬性和方法(不能傳實例的屬性和方法);

    調用:實例對象和類對象都可以調用。

靜態方法

    定義:使用裝飾器@staticmethod。參數隨意,沒有“self”和“cls”參數,但是方法體中不能使用類或實例的任何屬性和方法;

   

二。繼承

python里支持單根繼承,多繼承

相關語法

 

super為關鍵字,調用父類構造函數。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM