1. 程式人生 > >面向對象與正則表達式的學習

面向對象與正則表達式的學習

dict 變化 保護 字母 根據 對象 不存在 das 修飾符

面向對象的學習:

一、基本概念

1. 面向過程

(1) 概念:以過程為中心的編程思想,就是分析出解決問題所需要的步驟,然後用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就可以了。

(2) 優點:極大的降低了寫程序的復雜度,只需要順著要執行的步驟,堆疊代碼即可。因為程序的流程很清楚,按著模塊與函數的方法可以很好的組織。

(3) 缺點:只能用來解決一個問題,代碼牽一發而動全身。

(4) 應用:用於基本很少改變的場景,著名的例子有Linux內核、git、以及Apache HTTP Server等。

2. 面向對象

(1) 概念:程序設計的核心是對象,面向對象的方法主要是把事物給對象化,對象包括屬性與方法。

(2) 優點:易維護、易復用、易擴展,由於面向對象有封裝、繼承、多態性的特性,可以設計出低耦合的系統,使系統更加靈活、更加易於維護。

(3) 缺點:可控性差,無法像面向過程的程序設計一樣可以精準的預測問題的處理流程與結果。

(4) 應用:需求經常變化的軟件,一般需求的變化都集中在用戶層,如互聯網應用、企業內部軟件以及遊戲等。

二、面向對象中的名詞解析

1. 類:類就是一個模板,模板裏可以包含多個函數,每個函數都能實現一些功能。

2. 對象:根據模板(類)創建的實例,通過這個實例(對象)可以執行類中的函數。

3. 屬性:類中所定義的變量

4. 方法:類中所定義的函數

5. 實例化:通過類創建對象的過程

6. 總結:對象的抽象是類,類的具體化就是對象;也可以說類的實例化是對象,對象是類的實例。

三、特征

1. 封裝

(1) 概念:封裝是將對象運行時所需的資源封裝在程序對象中。簡單來說,就是將內容封裝起來,以後再去調用被封裝的內容。

(2) 調用封裝的內容有2種方法:

——通過對象直接調用

——通過self間接調用

2. 繼承

(1) 概念:繼承可以使得子類別具有父類別的各種屬性和方法,而不需要再次編寫相同的代碼。在令子類別繼承父類別的同時,可以重新定義某些屬性,並重寫某些方法,即覆蓋父類別的原有屬性和方法,使其獲得與父類別不同的功能。

(2) 多繼承

註:Python的類可以繼承多個類,而Java和C#中則只能繼承一個類

Python的類如果繼承了多個類,那麽其尋找方法的方式有2種

當類為經典類時會按照深度優先方式查找

當類為新式類時會按照廣度優先方式查找

3. 多態

概念:多態指同一個實體同時具有多種形式,在賦值之後,不同的子類對象調用相同的父類方法,產生的執行結果不同。

四、類的成員

1. 簡介:類的成員包括字段、方法和屬性。在所有成員中,只有字段中的普通字段保存於對象中,因此創建多少個對象在內存中就有幾個普通字段;而其他成員都保存在類中,也只占用一份內存空間。

2. 字段:包括普通字段和靜態字段,他們在定義和使用都有所區別,而最本質的區別是內存中保存的位置不同。

(1) 普通字段保存在對象中

(2) 靜態字段保存在類中

3. 方法:包括普通方法、靜態方法和類方法,三種方法在內存中都歸屬於類,區別在於調用方式不同。

(1) 公有方法

調用:可由對象名直接調用;如果通過類名來調用屬於對象的公有方法,需要顯式為該方法的self參數傳遞一個對象名,用來明確指定訪問哪個對象的數據成員。

特點:至少一個self參數;執行普通方法時,自動將調用該方法的對象賦值給self。在此方法中可以訪問屬於類和對象的成員。

(2) 私有方法

調用:只能在屬於對象的方法中通過self調用或在外部通過Python支持的特殊方式來調用。在此方法中可以訪問屬於類和對象的成員。

(3) 靜態方法

調用:可以通過類名和對象名調用,但不能直接訪問屬於對象的成員,只能訪問屬於類的成員。

特點:無默認參數。

(4) 類方法

調用:可以通過類名和對象名調用,但不能直接訪問屬於對象的成員,只能訪問屬於類的成員。

特點:至少一個cls參數;執行類方法時,自動將調用該方法的類復制給cls。

  1. 屬性:其實是普通方法的變種。

5. 類成員的修飾符:下劃線

  xxx :公有成員,在任何地方都能訪問

  __xxx or ...__xxx:私有成員,只有類對象自己能訪問,子類對象不能直接訪問,但在對象外部可以通過“對象名._類名__xxx”這樣的特殊方式來訪問。

  _xxx:受保護成員,不能用‘from module import *‘導入

  __xxx__:系統定義的特殊成員

註:Python中不存在嚴格意義上的私有成員

6. 類的特殊成員

(1) __init__:構造方法,通過類創建對象時,自動觸發執行。

(2) __del__:析構方法,當對象在內存中被釋放時,自動觸發執行,此方法一般無需定義。

(3) 類的屬性

  dir(類名):查出的是一個名字列表

  類名.__dict__:查出的是一個字典,key為屬性名,value為屬性值

(4) 特殊的類屬性

  類名.__name__:類的名字(字符串)

  類名.__doc__:類的文檔字符串

  類名.__base__:類的第一個父類(在講繼承時會講)

  類名.__bases__:類所有父類構成的元組(在講繼承時會講)

  類名.__dict__:類的字典屬性

  類名.__module__:類定義所在的模塊

  類名.__class__:實例對應的類(僅新式類中)

7. 混入機制

(1) 概念:Python類型的動態性使得我們可以動態為自定義類及其對象增加新的屬性和行為,俗稱混入(mixin)機制。

二、設計一個三維向量,實現其加法減法及瑜標量的乘除法

class Vecter3:
    def_init_(self,x=0,y=0,z=0):
              self.X=x
              self.Y=y
              self.Z=z
    def_add_(self,n):
              r=Vecter3()
              r.X=self.X+n.X
              r.Y=self.Y+n.Y
              r.Z=self.Z+n.Z
              return r
    def_sub_(self,n):
              r=Vecter3()
              r.X=self.X-n.X
              r.Y=self.Y-n.Y
              r.Z=self.Z-n.Z
              return r
    def_mul_(self,n):
              r=Vecter3()
              r.X=self.X*n
              r.Y=self.Y*n
              r.Z=self.Z*n
              return r
    def_truediv_(self,n):
              r=Vecter3()
              r.X=self.X/n
              r.Y=self.Y/n
              r.Z=self.Z/n
              return r
    def_floordiv_(self,n):
              r=Vecter3()
              r.X=self.X//n
              r.Y=self.Y//n
              r.Z=self.Z//n
              return r
    def show(self):
              print(self.X,self.Y,self.Z))

三.編寫一個程序類,用戶輸入一段英文,然後輸出這段英文中所有長度為3個字母的單詞,並且如果單詞有連續重復了兩次,只輸出一個

import re
x=input(Please input a string:)
pattern=re.compile(r\b[a-zA-Z]{3}\b)
print(pattern.findall(x))

面向對象與正則表達式的學習