前言
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()
这真是一个粗糙的“私有化”
网友评论