python 面向對象編程

1、面向對象VS面向過程

1.1 面向過程

面向過程就是明確要實現的目標後,先分析實現這一目標的步驟,再用函數將這些步驟逐一實現,而後根據實現步驟,依次調用這些函數。面向過程的優勢是程序的性能比面向對象高;缺點是沒有面向對象易複用、易維護、易擴展。python

1.2 面向對象

面向對象是一種爲了解決面向過程的不足、而且在面向過程的基礎上發展起來的思惟方式。按照面向對象的思惟進行編程,在明確目標後,首先分析這個目標世界都由哪些對象構成,以及實現這一目標的步驟,再根據實現步驟,考慮對象的屬性和方法,並經過編程予以實現,而後經過對象調用這些方法實現目標。與面向過程相比,兩者的優劣點正好相反。編程

1.3 對比

面向過程與面向對象是兩種不一樣類型的思惟方式。面向過程的思惟是一種工程師思惟,將給定的目標理解爲待解決的問題,因而工做思路是找方法,對方法進行分解,而後一步步實現。而面向對象的思惟是一種導演思惟,將給定的目標理解爲一個待編導的劇本,瞭解劇情後,導演首先考慮的是這個故事須要安排多少角色,而後角色與角色之間發生聯繫,推進故事情節的發展。函數

面向過程與面向對象不是兩種對立的編程思想,而是一種編程思想上的承接。面向對象包含了面向過程的思惟方式,兩者的差別在於面向對象在面向過程的基礎上增長了演員,也就是行動的主體。性能

2、面向對象的基本概念

2.1 類

類是一個抽象的概念,能夠將類理解爲可以建立對象的模板。spa

2.2 對象

基於類建立的對象都具備相同的性質和行爲,而後可根據須要賦予每一個對象獨特的個性。根據類來建立對象被稱爲實例化。code

2.3 屬性和方法

屬性是指類具備的特性,在類中屬性表現爲變量;方法是指類具備的功能,方法表現爲函數。對象

3、類的建立和使用

3.1 建立類

在python中,使用'class+類名():'的方式定義類。class是關鍵字,類名採用駝峯命名法,類名後面帶有一個小括號,小括號內能夠包含參數,表示繼承關係,沒有參數的話,表示繼承自object類(object類是最高級別的類)。類中能夠沒有任何內容,只包含一個pass關鍵字。繼承

3.2 類的成員

類的成員主要包括類屬性(類屬性、實例屬性)、方法(普通方法、類方法、靜態方法)。類的__dict__屬性中存儲了類的內置屬性、類屬性、類方法,對象的__dict__屬性中存儲了一些已賦值的類屬性和對象屬性。it

3.3 屬性的建立及訪問

實例屬性:實例屬性最好在__init__(self,…)中初始化,內部(實例屬性命名空間的內部)訪問時前面都須要加上self.,外部訪問時用'對象名.實例屬性名'的形式。模板

類屬性:在__init__()外初始化,內部(類屬性命名空間的內部)經過'類名.類屬性名'調用,外部既能夠經過'類名.類屬性名'調用,又能夠經過'對象名.類屬性名'來調用。

3.4 方法的定義及調用

普通方法 以'def fun_name(self,…):'的形式定義,在類的外部經過'對象.方法名'調用。 類方法 類方法定義時使用@classmethod來裝飾,函數必須傳入cls參數,而且用此來調用類屬性,'cls.類屬性名'。類方法能夠經過類或者實例來調用,單不可以訪問實例屬性。

class Dog():    # 類定義使用class關鍵字;類命名才用駝峯命名法;類名後面跟小括號,小括號內能夠包含參數,表示繼承關係,沒有參數的話,表示繼承自object類(object類是最高級別的類)
    leg_num = 4    # 類屬性,把同類都同樣的屬性做爲類屬性

    def __init__(self, name, age):  # 類方法,__init__()是一個特殊的類方法,用於Dog類建立實例時,對對象進行初始化。
        self.name = name    # 實例屬性
        self.age = age
    def run(self):  # 類方法,self形參用於接收Dog類建立的實力對象。
        print(self.name.title() + ' is running....')    # 使用句點法訪問對象

my_dog = Dog('xiaotian',6)   # Dog類建立實例對象my_dog時,使用實參'xiaotian'和6調用__init__()函數
my_dog.run()    # 使用句點法調用對象

四 面向對象的特色

4.1 封裝

隱藏屬性和方法的實現細節,僅對外提供訪問方式,經過必定規則約定屬性和方法訪問權限。

  • 普通名字,public
  • 以_前導名字,從語法上視爲public,但約定俗稱的意思是「能夠被訪問,但請視爲private,不要隨意訪問」
  • 以__前導,以__後綴名字,特殊屬性,public
  • 以__前導,不以__後綴名字,private

4.2 繼承

編寫類時,並不是老是要從空白開始。若是你要編寫的類是另外一個現成類的特殊版本,可以使用繼承。。一個類繼承另外一個類時,它將自動得到另外一個類的全部屬性和方法;原有的類稱爲父類,而新類稱爲子類。子類繼承了其父類的全部屬性和方法,同時還能夠定義本身的屬性和方法。private的成員不能爲子類繼承。

4.3 多態

多態就是子類能夠改寫父類的方法,進而能夠實現同一父類、不一樣子類的對象調用相同的方法,能夠實現不一樣的功能。

五 模塊與類的導入

Python容許用戶將類存儲在模塊中(即.py的文件中),而後在須要的時候,從存儲類的模塊中導入到當前模塊。若是存儲類的模塊與當前模塊在同一路徑下,那麼能夠直接導入存儲類的模塊。若是不在同一個路徑下,須要使用sys.path確認一下存儲類的模塊是否在path列表中。 

相關文章
相關標籤/搜索