Python面向對象之封裝

廣義的封裝:實例化一個對象,給對象空間封裝一些屬性。
狹義的封裝:私有制

私有成員:私有靜態字段,私有方法,私有對象屬性


對於私有靜態字段,私有方法,私有對象屬性,類的外部不能訪問.
----# 實例化對象不能訪問私有靜態字段,私有方法,私有對象屬性
----# 類名不能訪問私有靜態字段,私有方法,私有對象屬性

對於私有靜態字段,私有方法,私有對象屬性,類的內部能夠訪問.
對於私有靜態字段,私有方法,私有對象屬性來講,只能在本類中內部訪問,類的外部,派生類均不可訪問.

python中用雙下劃線開頭的方式將屬性隱藏起來(設置成私有的)
----#其實這僅僅是一種變形操做
----#類中全部下劃線開頭的名稱如__x都會自動變造成:_類名__x的形式
----這種自動變形的特色:
--------1.類中定義的__x只能在內部使用,如self.__x,引用的就是變形獲得結果。
--------2.這種變形其實正是針對外部的變形,在外部是沒法經過__x這個名字訪問到的
--------3.在子類定義的時候__x不會覆蓋在父類定義的__x,由於子類中變造成:_子類名__x,而父類中變成:_父類名__x
            即雙下劃線開頭的屬性在繼承給子類時,子類是沒法覆蓋的。

        這種變形須要注意的問題:
------------1.這種機制也並無真正意義上限制咱們從外部直接訪問屬性,知道了類名和屬性名就能夠拼出名字:_類名__屬性名
------------2.變形的過程只在類的定義是發生一次,在定義後的複製操做,不會變形。
------------3.在繼承中,父親若是不讓子類覆蓋本身的方法,能夠將方法定義爲私有的。


封裝不是單純意義上的隱藏

1.封裝數據
----將數據隱藏起來不是目的。隱藏起來而後對外提供操做該數據的接口,而後咱們能夠在接口附加上對該數據操做的限制
    以此完成對數據屬性操做的嚴格性。
2.封裝方法
----目擊是隔離複雜度。
    提示:在編程語言裏面,對外提供的接口(接口能夠理解爲一個入口),能夠是函數,稱爲接口函數,這與接口的概念
            不同,接口表明一組接口函數的集合。

相關文章
相關標籤/搜索