1. 程式人生 > >python類的假私有成員變數

python類的假私有成員變數

#前言
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()

這真是一個粗糙的“私有化”