在Python中,有如下幾種方式來定義變量:spa
如如下例子所示,我在test類中定義了num,_num 和 __num三個屬性,並建立了test的類對象t,對這三個屬性進行訪問,__num不能被訪問到.net
class test(object): def __init__(self): self.num = 10 self._num = 20 self.__num = 30 t = test() print(t.num) # 10 print(t._num) # 20 # print(t.__num) # AttributeError: 'test' object has no attribute '__num'
以下圖所示,使用命令dir查看t中的屬性和方法,__num的名字已經被重整爲「_test__num」了,可使用t._test__num對__num進行訪問對象
注:雖然私有變量能夠經過_類名__變量名來訪問,但強烈建議不要這樣作文檔
在使用不一樣方法導入模塊後,是否能使用模塊中的私有屬性和方法,有如下兩種狀況:get
首先咱們先建立一個test.py文件,將下面代碼複製進去:it
num = 10 _num = 20 __num = 30 def test(): print("--test--") def _test2(): print("--test2--") def __test3(): print("---test3--")
若是你想對類中的私有屬性進行操做時,有如下三種方法:class
添加getter和setter方法,類對象經過調用這兩種方法來對私有屬性進行操做test
class test(object): def __init__(self): self.__num = 10 def getNum(self): return self.__num def setNum(self, value): self.__num = value t = test() print(t.getNum()) # 10 t.setNum(20) print(t.getNum()) # 20
class test(object): def __init__(self): self.__num = 10 def getNum(self): return self.__num def setNum(self, value): self.__num = value num = property(getNum,setNum) t = test() print(t.num) # 10 t.num = 20 print(t.num) # 20
關於property方法,咱們來看下官方文檔:import
由文檔可得:變量
class test(object): def __init__(self): self.__num = 10 @property def num(self): return self.__num @num.setter def num(self, value): self.__num = value t = test() print(t.num) # 10 t.num = 20 print(t.num) # 20
關於@property,官方文檔以下:
根據文檔可得: