我正在閱讀我們如何確保資料封裝在python。乙個部落格上說
資料封裝意味著,我們只能通過getter和setter訪問私有屬性
請考慮blog中的以下片段:class robot:
def __init__(self, name=none, build_year=none):
self.name = name
self.build_year = build_year
現在,如果我建立類的物件,如下所示:
^$目前,我可以直接訪問屬性,因為我已經將它們定義為public(不使用__符號)
現在為了確保資料封裝,我需要將屬性定義為private
使用__符號並通過getter和setter訪問私有屬性。在
所以新的類定義如下:class robot:
def __init__(self, name=none, build_year=2000):
self.__name = name
self.__build_year = build_year
def set_name(self, name):
self.__name = name
def get_name(self):
return self.__name
def set_build_year(self, by):
self.__build_year = by
def get_build_year(self):
return self.__build_year
現在我將類例項化如下:x = robot("marvin", 1979)
x.set_build_year(1993)
這樣,我就實現了資料封裝,因為私有資料成員不再被直接訪問,它們只能通過類方法訪問。在
問題1:我們為什麼要這樣做?我們要保護**不讓誰知道?誰是外面的世界?任何擁有源**的人都可以根據自己的需求對其進行調整,那麼我們為什麼還要新增額外的方法(get/set)來修改/調整屬性呢?在
問題2:上面的例子是否被認為是data encapsulation?在
mac終端輸入python預設開啟python3
1.終端開啟 bash profile檔案 open bash profile 2.新增以下內容到.bash profile檔案 setting path for python 3.5 path library frameworks python.framework versions 3.5 bin...
python封裝繼承 python繼承 封裝
python繼承 封裝 1 為什麼要封裝 封裝資料的主要原因是 保護隱私 封裝方法的主要原因是 隔離複雜度 2 封裝分為兩個層面 第乙個層面的封裝 什麼都不用做 建立類和物件會分別建立二者的命名空間,我們只能用類名.或者obj.的方式去訪問裡面的名字,這本身就是一種封裝 r1.nickname 草叢...
python物件封裝 Python物件封裝安全性
您不應該真正依賴private,public等來保證安全性 如 防止惡意 和外部威脅 它們的本意是防止程式設計師朝自己的腳開槍,而不是作為 計算機 安全措施。你也可以輕鬆訪問c 物件的私有成員字段,只要你繞過靜態編譯器檢查,直接進入記憶體,但是你會說c 缺少真正的封裝嗎?在 最好的辦法是在單獨的程序...