python類的假私有成員變數
阿新 • • 發佈:2018-12-24
#前言
Python的類並不使用關鍵字區分是私有成員和共有成員,但是為啥私有成員變數外面還是訪問不到呢?
粗糙的隱藏
普通的python類
class TT:
def __init__(self,name):
self.name=name
self.privateMem=1
t=TT('hah')
print(t.privateMem)
想都不用想會打印出1
因為這個時候privateMem還是個共有 成員,那麼怎麼變成私有成員呢?
加倆下劃線
class TT:
def __init__(self,name):
self.name=name
self.__privateMem=1
t=TT('hah')
print(t.privateMem)
結果就是
Traceback (most recent call last):
File "/Users/zhangyan/Documents/moklearn/pyHigh/one/demo3.py", line 13, in <module>
print(t.privateMem)
AttributeError: 'TT' object has no attribute 'privateMem'
提示說找不到這個成員。那麼隱藏起來了麼?答案是根本沒有!表面私有而已。
print(t.__dict__)
看看成員
{'_TT__privateMem': 1, 'name': 'hah'}
WTF ,原來python就是給這個成員換了個名字(privateMem變成了_TT__privateMem ),我的天,這就私有辣?(私有方法也是一樣)
class TT:
def __init__(self,name):
self.name=name
self.__privateMem=1
def __privatefun(self):
print("private")
t=TT('hah')
print(t._TT__privateMem)
t._TT__privatefun()
這真是一個粗糙的“私有化”