python没有为类实现私有属性,因此设计了一种折衷方法来实现这一点。(私有属性不被子类继承)
实现方法
- 对类属性命名时,开头前加上两个以上的下划线;
- 对类属性命名时,末尾下划线的个数不超过一个;
例子
class Test:
def __func1(self):
pass
def __func2__(self):
pass
__var1 = 1
___var2_ = 2
__var3__ = 4
obj = Test()
tmp = [print(x, end='\t') for x in dir(Test) if 'func' in x or 'var' in x]
print()
tmp = [print(x, end='\t') for x in dir(obj) if 'func' in x or 'var' in x]
运行上面代码得到的结果为:
_Test___var2_ _Test__func1 _Test__var1 __func2__ __var3__
_Test___var2_ _Test__func1 _Test__var1 __func2__ __var3__
这说明__func1, __var1, ___var2_的命名被“修饰”了,而__func2__和__var3__由于末尾下划线超过两个不满足name mangling的条件。
|