python物件導向三大特性 封裝,繼承,多型

2021-10-09 15:03:57 字數 1906 閱讀 2408

面向程式設計三大特性:封裝(隱藏),繼承,多型。

通過私有屬性,私有方法的方式實現封裝。

python支援多重繼承,乙個之類可以繼承多個父類。

class  子類類名(父類1

,父類2

,…):

類體父類名.__init__(self,引數列表)

1.成員繼承:子類繼承了父類除構造方法之外的所有成員。

2.方法重寫:子類可以重新定義父類中的方法,這樣就會覆蓋父類中的方法,也稱為重寫。

通過類的方法**dir()**檢視物件屬性

重寫__str__方法:

用於返回乙個對於「物件的描述」,對應於內建函式str()經常用於print()方法,幫助我們檢視物件的資訊。_str_()可以重寫。

多型是指同乙個方法呼叫,由於物件不同可能會產生不同的行為。

1.多型是方法的多型,屬性沒有多型

2.多型的存在有兩個必要條件:繼承、方法重寫

class man:

def eat(self):

print

("餓了,吃飯了!"

)class chinese(man):

def eat(self):

print

("中國人用筷子吃飯"

)class english(man):

def eat(self):

print

("英國人用刀叉吃飯"

)

值得注意的是,python的多型和c++的多型是不一樣的。在c++中,多型的目的則是為了介面重用。也就是說,不論傳遞過來的究竟是那個類的物件,函式都能夠通過同乙個介面呼叫到適應各自物件的實現方法。也就是說,c++會對傳入的引數型別等進行判斷來確定使用子類還是父類的方法。python只有重寫,並不能對傳入的引數型別進行判斷。

class operator(

): def add

(self, a, b):

if b ==0:

return a

sum = a ^ b

carry =

(a & b)

<<

1return self.

add(sum, carry)

class stringoperator(operator):

def __init__(self):

operator.__init__(self)

def add

(self, a, b):

return"".

join

([a,b])

def test(

): a =

1 b =

2 op = stringoperator(

)print

(op.

add(a,b)

)test(

)

執行報錯:

return"".

join

([a,b]

)typeerror: sequence item 0: expected str instance,

int found

也就是,python如果子類重寫方法,就呼叫子類的方法,不會進行引數的型別判斷等。

但,我們知道python的+號是可以同時處理,int型, str 型,實現原理很簡單。就是 int 型和 str 型的例項屬於不同的object,類本身會定義__add__方法去實現。也就是說, int 型的object用他內建的__add__方法, str型也一樣。

參考:python物件導向三大特性;

關於python的封裝,繼承、多型、重寫

python物件導向三大特性

定義 封裝一些資料和方法,只給外界提供必要的功能,掩蓋細節,提高 復用性和系統安全性。資料角度 用乙個類包裝多個變數,還可以定義方法,運算元據 行為角度 不同程式設計師開發乙個專案的不同功能,在使用時,直接呼叫,不需要思考其內部實現 設計角度 1 分而治之 拿到需求之後,分析需求,將需求拆解為不同的...

Python 物件導向三大特性 封裝

封裝,顧名思義就是將內容封裝到某個地方,以後再去呼叫被封裝在某處的內容。封裝重點 1.def init self 構造方法 雖然它是函式形式,但在類中就不叫函式了 叫方法 2.value 私有 隱藏 屬性,只能在類中被呼叫。3.def func self 私有 隱藏 方法,只能在類中被呼叫。示例1 ...

python 物件導向三大特性 繼承

一 什麼是繼承 繼承是一種建立新類的方式,在python中,新建的類可以繼承乙個或者多個父類,父類又可以稱為基類活超類,新建的類稱為派生類或子類。簡單來說就是 子類可以繼承父類的方法和屬性。python中類的繼承分為 單繼承和多繼承 class parentclass1 定義父類 pass clas...