python面向物件-------封裝
說到封裝我們來先了解下定義:
- 指的是隱藏類的細節實現,讓使用者不關心這個細節
- 目的是讓使用者儘可能的減少對例項變數(屬性,方法)進行操作
上面這兩句怎麼理解呢,好比你買了輛車,你能操作的東西只有油門,剎車,方向盤之類的,實際上車的實現可能有上萬
個零件,每個零件都有不同的作用,那麼有些零件是給維修人員用的。其實汽車給你的時候已經就是封裝好的,讓你用的
東西顯而易見,不讓你用的都封裝起來了,這樣你用起來更加方便,更加快捷。類的封裝也是這樣的,自己寫的類不一定
就是自己用,有別人用的時候,如果你給別人的時候是1000多個方法,別人只是想要其中一個方法,肯定是不行的,所以
儘可能的把自己用的隱藏在類的內部,給別人用的你再公開。
接下來在說下私有屬性的定定義
- 以雙下劃線開頭,不以雙下劃線結尾的識別符號為私有成員,在類的外部無法直接訪問
class A:
def __init__(self):
# __p1為私有屬性,在類的外部不可呼叫
self.__p1 = 100
#在類的內部重新定義一個函式,呼叫p1就可以
def test(self):
print(self.__p1)
#類內呼叫私有方法(A類的方法可以呼叫A類的私有方法)
self.__m1()
#再定義一個私有方法
def __m1(self):
print('我是A類的m1方法')
a = A()
# a.__p1去呼叫這個初始化建構函式的時候,__init__函式為a物件建立了一個變數
# 這個變數是雙下劃線開頭的私有屬性,私有屬性在類的外部是無法呼叫的,只有類的
# 內部才可以呼叫,所以a.__p1會報錯'A' object has no attribute '__p1'
print(a.__p1)#會報錯
a.test()
#該方法是類內的私有方法,因此外部呼叫會報錯
a.__m1()#會報錯