Python---面向對象

類的設計:

在程序開發中,要設計一個類,通常需要滿足以下三要求

1.類名 這類事物的名字,滿足大駝峯命名法

2.屬性 這類事物具有什麼樣的特徵

3.方法 這類事物具有什麼樣的行爲

 

面向對象的基礎語法:

定義簡單的類:

class 類名:

    def 方法1(self,參數列表):

        pass

    def 方法2 (self,參數列表):

當一個類定義完成之後,要使用這個類來創建對象,語法格式如下:

對象變量 = 類名()

實例:

需求

    小貓愛吃魚,小貓要喝水

 

一.面向對象三大方法

1.初始化方法

我們現在已經知道了使用類名()

當使用類名()創建對象時,python的解釋其會自動執行以下操作:

    1.爲對性在內存中分配空間--創建對象

    2.調用初始化方法爲對象的屬性設置初始值--初始化方法

    __init__ 方法是專門用來定義一個類具有哪些屬性的方法

實例:

2.__del__方法

在python中

當使用類名()創建對象時,爲對象分配空間後,自動調用__init__

當一個對象被從內存中銷燬前,會自動調用__del__方法

實例:

3.__str__方法

在python中,使用pytjon輸出對象變量,

在默認情況下,會輸出這個變量引用的對象是由哪一個類創建的對象,以及在內存中

的地址(十六進制表示)

如果在開發中,希望使用print輸出對象變量時,

能夠打印自定義的額內容,就可以利用__str__這個內置方法了4

 

二.面向對象三大特徵:

1.封裝:根據職責將屬性和方法封裝到一個抽象的類中

2.繼承: 實現代碼的重用,相同的代碼不需要重複的寫

3.多態: 不同的對象調用相同的方法,產生不同的結果,

增加代碼的靈活度

1.封裝

1.封裝是面向對象變成的一大特點

2. 面向對象變成的第一部 將屬性和方法封裝到一個抽象的類中

3. 外界使用類創建對象,然後讓對象調用方法

4.對象方法的細節都被封裝在類的內部

實例一:

實例二:

1.房子有戶型,總面積和傢俱名稱列表

    新房子沒有任何的傢俱

2.傢俱有名字和佔地面積,其中

牀:佔地4平米

衣櫃: 佔地2平米

參作: 佔地3平米

3.將以上三間傢俱添加到房中

4.打印房子時,要求輸出:戶型,總面積,剩餘面積,傢俱名稱列表

2.繼承:

實例一:

1.繼承的傳遞性:

1,B類傳承與A類,C類傳承與B類

2,那麼C類就具有B 類和A類所有的屬性和方法

子類擁有父類以及父類的父類所有封裝的屬性和方法

實例二:

2.覆蓋父類的方法

如果在開發中,父類的方法的實現和子類方法的實現,完全不同,就可以使用覆蓋的方法

在子類中重新編寫父類的方法

具體實現方式,就相當於在子類中定義了一個和父類同名的方法並且實現

重寫之後,在運行時,只會調用子類的重寫方法。而不會再調用父類封裝的方法

 

3.多繼承

多繼承

子類擁有一個父類叫做單繼承

子類可以擁有多個父類,並且具有多個父類的屬性和方法

例如:孩子會繼承自己父親母親的特性

語法:

class 子類名(父類名,父類名2...)

    pass

3.多態

 

三.私有屬性和私有方法

應用成精及定義方式

應用場景

    在實際開發中,對象的屬性或方法可能只希望自己能看

    私有屬性就是對象不希望公開的屬性

    私有方法就是對象不希望公開的方法

定義方法

    在定義屬性或方法時,在屬性名或者方法前增加“__”

實例一:

實例二之父類私有方法屬性1:

1.子類對象不能在自己的方法內部,直接訪問父類的私有屬性和私有方法

2.子類對象可以通過父類的共有方法簡介訪問到私有屬性或私有方法

私有屬性,私有方法是對象的隱私,不對外公開,外界以及子類都不能直接訪問

私有屬性,私有方法常做一些內部的事情

四.類的結構

實例:

1.使用面向對象開發,第一部是設計類

2.使用雷鳴()創建對象,創建對象的動作有兩步

1.在內存中對象分配空間

2.調用初始化方法__init__爲對象初始化

3.對象創建後,內存中就有一個對象的實實在在的存在--實例

 

因此:

1.創建出來的對象叫做類的實例

2.創建對象的動作叫做實例化

3.對象的屬性叫做實例屬性

4.對象調用的方法叫做實例方法

 

在程序執行時:

1.對象各自擁有自己的實例屬性

2.調用對象的方法,可以通過self

父嗯文自己的屬性

調用自己的方法

結論:

1.每一個對象都有自己獨立的內存空間,保存各自不同的額屬性

2。多個對象的方法,在內存中只有一份,在調用方法時,需要把對象的引用傳遞到方法內部

1.類結構:

是一個特殊的對象

python中一切皆對象

    class AAA: 定義的類屬性屬於類對象

    obj1 = AAA: 屬於實例對象

在運行程序時,類同樣會被加載到內存

在python中,類是一個特殊的對象--類對象

除了封裝 實例(對象)的屬性和方法外,類對象還可以有自己的屬性和方法

 

通過類名. 的方式可以直接訪問類的屬性或者調用類的方法

2.類屬性

類屬性就是針對類對象定義的屬性

    使用賦值語句在class關鍵字下方可以定義類屬性

    類屬性用於記錄於這個類相關的特徵

類方法就是針對類對象定義的額方法

    在類方法內部就可以直接訪問類屬性或者調用其他方法

 

語法如下

@classmethod

def 類方法(cls):

    pass

 

 

靜態方法

在開發時,如果需要在類中封裝一個方法,這個方法:

    既不需要訪問實例屬性或者調用實例方法

    也不需要訪問類屬性或者調用類方法

這個時候可以把這個方法封裝成一個靜態方法

他語法如下:

@staticmethod

def 靜態方法():

    pass

靜態方法需要修飾器@staticmethod來標識,告訴解釋器這是一個靜態方法

通過類名,調用靜態方法

 

綜合應用:

案例小結:

1.實例方法:方法內部需要訪問實例屬性

2.類方法:方法內部只需要訪問類屬性

3.靜態方法:方法內部不需要訪問實例屬性

 

提問:如果方法內部,既需要訪問實例屬性,有需要訪問類屬性,應該用什麼方法?

答: 應該用定義實例方法

"""

設計模式:

使用類名()創建對象時候,python的解釋器首先會調用__new__方法作爲對象分配空間

__new__是一個由object基類提供的額內之的靜態方法,主要有兩個作用:

    在內存中爲對象分配空間

        返回對象的引用

 

python的解釋器獲得額對象的引用後,將引用作爲第一個參數,傳遞給__init__方法

# __new__: 負責給對象分配空間 __init__(初始化方法)負責給對象初始化

 

發佈了70 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章