封裝第乙個層面的封裝:類就是麻袋,這本身就是一種封裝第二個層面的封裝:類中定義私有的,只有在類的內部使用,外部無法訪問
第三個層面的封裝:明確區分內外,內部的實現邏輯,外部無法知曉,並且為封裝到內部的邏輯提供了乙個訪問介面給
外部使用
封裝的本質是為了明確的區分內外部。
python約定:
約定一:任何以單下劃線開頭的名字都應該是內部的,私有的
約定二:雙下劃線開頭的名字
其實這僅僅這是一種變形操作且僅僅只在類定義階段發生變形
類中所有雙下劃線開頭的名稱如__x都會在類定義時自動變形成:_類名__x的形式:
classa: _m = 1 #
這樣定義外部仍可以直接訪問到
__n=0 #
類的資料屬性就應該是共享的,但是語法上是可以把類的資料屬性設定成私有的如__n,會變形為_a__n
def__init__
(self):
self.
__x=10 #
變形為self._a__x
def__foo(self): #
變形為_a__foo
print('
from a')
defbar(self):
self.
__foo() #
只有在類內部才可以通過__foo的形式訪問到.
#a._a__n是可以訪問到的,
#這種,在外部是無法通過__x這個名字訪問到。
Python高階 封裝
繼承 封裝 多型 封裝對外部隱藏資訊,不能隨意訪問 修改物件的資料 方法 通過限制類的屬性和方法的訪問方式,實現 封裝 封裝的三個層次 類的封裝 外部可以任意訪問 修改類中的屬性和方法 私有屬性 外部不可以訪問 修改類的屬性或方法 公有方法 私有屬性 外部有條件限制的訪問 修改屬性,呼叫方法 封裝的...
函式高階 封裝 類
函式高階 函式的預設引數 如果某一函式需要引數,在函式的宣告或實現時,可以在括號中設定預設引數,如 void li1 int a 10 intli2 int a 10,int b 20 如果有預設引數,則呼叫函式時,如果沒有輸入相應引數,則使用預設引數 int li2 15 則函式中a 15,b 2...
Python高階之 元類
幾個魔術方法 new init call new 物件的建立,是乙個靜態方法,第乙個引數是cls 想想也是,不可能是self,物件還沒建立,哪來的self init 物件的初始化,是乙個例項方法,第乙個引數是self call 物件可call,注意不是類,是物件。class bar object d...