python私有方法和私有屬性
阿新 • • 發佈:2018-11-22
Python預設的成員函式和成員變數都是公開的,Python 私有屬性和方法沒有類似別的語言的public,private等關鍵詞來修飾。 在python中定義私有變數只需要在變數名或函式名前加上 "__"兩個下劃線,那麼這個函式或變數就會為私有的了
宣告該方法為私有方法,不能在類的外部呼叫程式碼
class Test(object): #普通方法 def test(self): print("普通方法test")#普通方法 def _test1(self): print("普通方法_test1方法") #私有方法 def __test2(self): print("私有方法__test2方法") t = Test() t.test() t._test1() #t.__test2()#呼叫的時候會報錯
執行效果
外界無法訪問私有方法,但可以在類內部方法私有方法。
class Test(object): #私有方法 def __test2(self): print("私有方法__test2方法") #普通方法 def test(self): print("普通方法test") #普通方法def _test1(self): print("普通方法_test1方法") #可以在類內部呼叫私有方法 t.__test2()# self.__test2() t = Test() t.test() t._test1() #t.__test2()和t.test2()#呼叫的時候會報錯
私有方法應用場景
執行效果
私有屬性
如果有一個物件,當需要對其進行修改屬性時,有2種方法
物件名.屬性名 = 資料 ---->直接修改
物件名.方法名() ---->間接修改
為了更好的儲存屬性安全,即不能隨意修改,一般的處理方式為
將屬性定義為私有屬性
新增一個可以呼叫的方法,供呼叫
案例
class Person(object): def __init__(self, name): self.__name = name def get_name(self): return self.__name def set_name(self, new_name): if len(new_name) >= 5: self.__name = new_name else: print("error:名字長度需要大於或者等於5") xiaoming = Person("atguigu") print(xiaoming.get_name()) #print(xiaoming.__name)#會報錯
class Person(object): def __init__(self, name): self.__name = name def get_name(self): return self.__name def set_name(self, new_name): if len(new_name) >= 5: self.__name = new_name else: print("error:名字長度需要大於或者等於5") p = Person("afu") p.set_name("wanger") print(p.get_name()) p.set_name("lisi") print(p.get_name())
執行如圖:
總結
Python中沒有像C++中public和private這些關鍵字來區別公有屬性和私有屬性
它是以屬性命名方式來區分,如果在屬性名前面加了2個下劃線'__',則表明該屬性是私有屬性,否則為公有屬性(方法也是一樣,方法名前面加了2個下劃線的話表示該方法是私有的,否則為公有的)。