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()

这真是一个粗糙的“私有化”

猜你喜欢

转载自blog.csdn.net/skullFang/article/details/78903474