python物件導向(二)之封裝

2021-08-13 05:41:23 字數 1675 閱讀 8375

在程式設計中,封裝(encapsulation)是對具體物件的一種抽象,即將某些部分隱藏起來,在程式外部看不到,其含義是其他程式無法呼叫。

即「封裝」就是將抽象得到的資料和行為(或功能)相結合,形成乙個有機的整體(即類);封裝的目的是增強安全性和簡化程式設計,使用者不必了解具體的實現細節,而只是要通過外部介面,一特定的訪問許可權來使用類的成員。這就用到私有化,前面簡單的講了下,下面回具體將。

封裝資料的主要原因是:保護隱私(把不想別人知道的東西封裝起來)

封裝方法的主要原因是:隔離複雜度(比如:電視機,我們看見的就是乙個黑匣子,其實裡面有很多電器元件,對於使用者來說,我們不需要清楚裡面都有些元件,電視機把那些電器元件封裝在黑匣子裡,提供給使用者的只是幾個按鈕介面,使用者只需要知道通過按鈕就能對電視機的操作就行,而且也避免了使用者對其無意識的破環)。

封裝分為兩個層面,但無論哪種層面的封裝,都要對外界提供好訪問你內部隱藏內容的介面(介面可以理解為入口,有了這個入口,使用者無需且不能夠直接訪問到內部隱藏的細節,只能走介面,並且我們可以在介面的實現上附加更多的處理邏輯,從而嚴格控制使用者的訪問)。

class

a: __n=0

#類的資料屬性就應該是共享的,但是語法上是可以把類的資料屬性設定成私有的如__n,會變形為_a__n

def__init__

(self):

self.__x=10

#變形為self._a__x

defgetx

(self):

#起名字時一般是屬性首字母大寫再在前面加get或者set

return self.__x

defsetx

(self,x):

self.__x=x

def__foo

(self):

#變形為_a__foo

print('from a')

defbar(self):

self.__foo() #只有在類內部才可以通過__foo的形式訪問到.

這種自動變形的特點:

1、類中定義的__x只能在內部使用,如self.__x,引用的就是變形的結果。

2、這種變形其實正是針對外部的變形,在外部是無法通過__x這個名字訪問到的。

3、在子類定義的_ _ x不會覆蓋在父類定義的_ _ x,因為子類中變形成了:_ 子類名 _ _ x,而父類中變形成了:父類名 _ _ x,即雙下滑線開頭的屬性在繼承給子類時,子類是無法覆蓋的。

上面講了雙下劃線,下來講下但下劃線和前後都有下劃線的情況

單下劃線開頭(_)

在乙個模組中以單下劃線開頭的變數和函式被預設當作內部函式,如果使用from a_module import * 匯入時,這部分變數和函式不會被匯入。不過值得注意的是,如果使用 import a_module 這樣匯入模組,仍然可以用a_module._some_var 這樣的形式訪問到這樣的物件。

雙下劃開頭結尾

雙下劃線開頭雙下劃線結尾的是一些 python 的特殊物件,如類成員的 _ _ init_ _ ,_ _ del _ , _ new _ _ , _ str _等。* python 官方推薦永遠不要將這樣的命名方式應用於自己的變數或函式,*而是按照文件說明來使用。

python物件導向之封裝

在python中用雙下劃線開頭的方式將屬性隱藏起來 設定成私有的 其實這僅僅這是一種變形操作且僅僅只在類定義階段發生變形 類中所有雙下劃線開頭的名稱如 x都會在類定義時自動變形成 類名 x的形式 classa n 0 類的資料屬性就應該是共享的,但是語法上是可以把類的資料屬性設定成私有的如 n,會變...

python物件導向之封裝

封裝 1.封裝是物件導向程式設計的一大特點 2.物件導向程式設計的第一步 將屬性和方法封裝到乙個抽象的類中 3.外界使用類建立物件,然後讓物件呼叫方法 4.物件方法的細節都被封裝在類的內部 需求 1 1.小明體重75.0公斤 2.小明每次跑步都會 0.5公斤 3.小明每次吃東西體重都會增加1公斤 需...

python物件導向之 封裝

1.先看隱藏。在python中用兩個下劃線開頭的方式將屬性隱藏起來。注意 這種只是語法的變形,在讀到有以 開的的函式時,會自動將名稱變成 類名 屬性 這種格式,所以在函式外部是無法通過 屬性 找到這個屬性的。class foo n 111111 將屬性隱藏起來 在定義階段會變成 foo n def ...