天天看點

幹貨分享丨Python從入門到編寫POC之初識OOP和類

幹貨分享丨Python從入門到編寫POC之初識OOP和類

1、初識OOP和類

面向對象程式設計——Object Oriented Programming,簡稱OOP,是一種程式設計思想。OOP把對象作為程式的基本單元,一個對象包含了資料和操作資料的函數。

面向過程的程式設計把計算機程式視為一系列的指令集合,即一組函數的順序執行。為了簡化程式設計,面向過程把函數繼續切分為子函數,即把大塊函數通過切割成小塊函數來降低系統的複雜度。

而面向對象的程式設計把計算機程式視為一組對象的集合,而每個對象都可以接收其他對象發過來的消息,并處理這些消息,計算機程式的執行就是一系列消息在各個對象之間傳遞。

在Python中,所有資料類型都可以視為對象,當然也可以自定義對象。自定義的對象資料類型就是面向對象中的類(Class)的概念。

幹貨分享丨Python從入門到編寫POC之初識OOP和類

類(Class)是面向對象程式設計(OOP,Object-Oriented Programming)實作資訊封裝的基礎。類是一種使用者定義類型,也稱類類型。每個類包含資料說明和一組操作資料或傳遞消息的函數。類的執行個體稱為對象。

2、新式類與舊式類

先看一下二者的差別,首先是舊式類,舊式類又稱為經典類。

這樣就定義了一個很簡單的舊式類,将它執行個體化:

有人可能會問DEMO1.__class__是什麼意思?

DEMO1是一個instance(執行個體),也是一個對象,而每個對象都有一個__class__屬性,用來顯示它的類型,到了Python2.2以後,就有了新式類。

由此,新式類與舊式類的差別:

(1)舊式類,.__class__和type( )的類型不同,但是新式類是相同的;

(2)新式類要在類的名字後面跟上(object),這是一個繼承的類的操作,也是基本操作。

3、定義類

定義新式類的方法

第一種方法:

第二種方法:

4、建立類

寫一個簡單的例子:

聲明建立了一個名為“students”的類,用縮進表示這個類的内容,有些人也會把類裡面的函數叫做“方法”。

PS:類中的函數的參數必須包括self參數,且預設作為第一個參數,繼續深入,def __init__是一個特殊的函數,叫做構造函數(初始化函數)。

這樣就意味着執行個體化時要給參數name提供一個值,作為類的初始化内容,同時,要通過name參數傳一個值,成為類和執行個體的一個屬性。

幹貨分享丨Python從入門到編寫POC之初識OOP和類

這樣就确定了這個類的基本屬性,加深了解一下:

運作一下:

幹貨分享丨Python從入門到編寫POC之初識OOP和類

為何self有時必須用,有時卻不需要?

其實,self不用非得寫成self,寫成其它的也可以,這隻是約定俗稱吧。

總而言之:

(2)self的名字并不是規定死的,但是最好還是按照約定是用self;

(3)self總是指調用時的類的執行個體。

5、繼承

“繼承”是面向對象軟體技術當中的一個概念。如果一個類A繼承自另一個類B,就把這個A稱為"B的子類",而把B稱為"A的父類"。繼承可以使得子類具有父類的各種屬性和方法,而不需要再次編寫相同的代碼。

在令子類繼承父類的同時,可以重新定義某些屬性,并重寫某些方法,即覆寫父類的原有屬性和方法,使其獲得與父類不同的功能。另外,為子類追加新的屬性和方法也是常見的做法。

先舉一個簡單例子:

幹貨分享丨Python從入門到編寫POC之初識OOP和類

這就是繼承。有個小疑問,為啥是1.80m不是1.7m呢?

因為繼承了students,是以goddess這個類就有了students的所有函數(方法)和屬性,但是如果有同樣的名稱方法(函數),那麼就會顯示goddess中的方法,這叫做方法重寫。