學習python的第四十六天-第八章 面向對象

第八章 面向對象

使用面向對象的程序設計,能夠更好的設計軟件架構,維護軟件模塊,並易於框架和組件的重用。python支持面向過程,面向對象,函數式編程等多種編程範式。python不強制我們使用任何一種編程範式,我們可以使用過程式編程編寫任何程序。對於中等和大型項目來說,面向對象將給我們帶來很多優勢。(看到寫到這裏我就開始犯嘀咕,當我寫代碼超過500行的時候是什麼時候)

8.1 面向對象的概述

面向對象是一種描述業務問題,設計業務實體和實體之間關係的方法。面向對象主要用於軟件開發的分析和設計階段,通常使用UML(統一建模語言)進行建模。

8.2 類和對象

python使用class關鍵字定義一個類,類名的首字符一般要大寫。類把需要使用的變量和方法組合到一起,這種方式稱爲封裝。類的方法必須有一個self參數,但是在方法調用時可以不傳遞這個參數。

8.3 屬性和方法

類由屬性和方法組成。類的屬性是對數據的封裝,而類的方法則表示對象具有的行爲。類通常由函數和變量組成。python的構造函數,析構函數,私有屬性或方法都是通過名稱約定區分的。

python的屬性分爲實例屬性和靜態屬性。實例屬性是以self爲前綴的屬性。__init__ 方法即python類的構造函數,如果__init__ 方法中定義的變量沒有使用self作爲前綴聲明,則該變量只是普通的局部變量。在python中靜態變量被稱爲類變量,類變量可以在該類的所有實例中被共享。

class Fruit:
    price = 0                                   # 類屬性

    def __init__(self):
        self.color = "red"                      # 實例變量
        zone = "China"                          # 局部變量

if __name__ == "__main__":
    print(Fruit.price)                           # 使用類名調用類變量
    apple = Fruit()                            # 實例化
    print(apple.color)                         # 打印apple實例的顏色
    Fruit.price = Fruit.price + 10                # 將類變量加10
    print ("apple's price:" + str(apple.price))      # 打印apple實例的price
    banana = Fruit()                          # 實例化banana
    print ("banana's price:" + str(banana.price))  # 打印banana實例的price

類的方法也分爲公有方法和私有方法。私有方法不能被模塊外的類或方法調用,私有方法也不能被外部的類或函數調用。python的靜態方法並有沒和類的實例進行名稱綁定,要調用只需使用類名作爲它的前綴即可。

self參數用於區分函數和類的方法。

python中還有一種方法稱爲類方法。類方法是將類本身作爲操作對象的方法。

構造函數用於初始化類的內部狀態,爲類的屬性默認值。python的構造函數名爲__init____init__方法除了用於定義實例變量外,還用於程序的初始化。

析構函數用於釋放釋放對象佔用的資源。python提供了析構函數__del__()。析構函數可以顯示釋放對象佔用的資源,是另一種資源釋放的方式。如果程序中不提供析構函數,python會在後臺提供默認的析構函數,所以應該在只有需要的時候再定義__del__()

python採用垃圾回收機制清除對象,python提供了gc模塊釋放不再使用的對象。垃圾回收機制有許多種算法,python採用的是引用計數的方式。當某個對象在其作用域內引用計數爲0時,python就會自動清除該對象。垃圾回收機制很好的避免了內存泄漏的發生。

8.4 繼承

繼承是面向對象的重要特性之一。通過繼承可以創建新類,目的是使用或修改現有類的行爲。原始的類被稱爲父類或超類,新類被稱爲子類或派生類。繼承可以實現代碼的重用,減少代碼的編寫。

python在類名後使用一對括號表示繼承的關係,括號中的類即爲父類。如果父類定義了__init__方法,子類必須顯式調用父類的__init__方法。

子類可以替代父類對象,這種特性稱爲多態性,由於python的動態類型,決定了python的多態性。

python支持多重繼承,即1個類可以繼承多個父類。多重繼承的語法格式如下所示:

class_name(parent_class1, parent_class2...)

其中class_name是類名,parent_class1,和parent_class2是父類名。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章