在程式設計中,封裝(encapsulation)是對 object 的一種抽象,即將某些部分隱藏起來,在程式外部看不到,即無法呼叫(不是人用眼睛看不到那個**,除非用某種加密或者混淆方法,造成現實上的困難,但這不是封裝)。
要了解封裝,離不開「私有化」,就是將類或者函式中的某些屬性限制在某個區域之內,外部無法呼叫。
python 中私有化的方法也比較簡單,就是在準備私有化的屬性(包括方法、資料)名字前面加雙下劃線。
舉例如下:
__metaclass__ = type
class protectme:
def __init__(self):
self.me = "zqs"
self.__name = "kivi"
def __python(self):
print("i love python")
def code(self):
print("which language do you like")
self.__python()
if __name__ == '__main__':
p = protectme()
print(p.me)
print(p.__name)
執行結果:
zqs
traceback (most recent call last):
file "c:/zhu/python-pytorch/test4.py", line 18, in print(p.__name)
attributeerror: 'protectme' object has no attribute '__name'
檢視報錯資訊,告訴我們沒有__name
那個屬性。果然隱藏了,在類的外面無法呼叫。
用上面的方法,的確做到了封裝。但是,我如果要呼叫那些私有屬性,該怎麼辦?
可以使用property
函式。
class protectme:
def __init__(self):
self.me = "zqs"
self.__name = "kivi"
@property
def name(self):
return self.__name
if __name__ == '__main__':
p = protectme()
print(p.name)
從上面可以看出,用了@property
之後,在呼叫那個方法的時候,用的是p.name
的形式,就好像在呼叫乙個屬性一樣,跟前面的p.name
的格式相同。 python私有化方法 Python 私有化
python中的私有變數和私有方法仍然是可以訪問的 訪問方法如下 私有變數 例項.類名 變數名 私有方法 例項.類名 方法名 python並沒有真正的私有化支援,但可用下劃線得到偽私有。盡量避免定義以下劃線開頭的變數 1 單下劃線 開始的成員變數叫做保護變數,意思是只有類例項和子類例項能訪問到這些變...
Python中屬性的私有化
1.引入 在python物件導向程式設計過程中,修改類屬性都是直接通過類名修改的,如果有些重要的屬性不希望他人任意修改怎麼辦呢?這就要用到屬性私有化功能。2.概念 保護屬性安全,使其不能隨意修改,將屬性定義為私有屬性,新增乙個可呼叫的方法去使用。3.語法 兩個下劃線開頭,宣告該屬性為私有,不能在類的...
物件導向 封裝和private私有化
封裝的概述 封裝是指隱藏物件的屬性和實現細節,僅僅對外提供了可見的公共的方法。將不需要或則不能對外提供的內容隱藏起來,進行封裝。簡單地說就是將功能的具體實現 寫到方法中,外界只需要呼叫該方法名就可實現功能。封裝的表現 函式就是乙個基本的封裝體。類也是乙個封裝體 封裝的優點 1 提高了 的復用性。2 ...