class Test(object):
def __init__(self):
self.__attr = "__attr" #无法直接访问,真正有效,可以通过_class__membername访问
self._attr = "_attr" #可以直接访问,属于一种约定
def __test(self):
print("__test, __xxx 意味着不能直接访问该属性,通过_class__membername访问,该技术叫name_mangling")
def __test__(self):
print("__test__, __xxx__ 通常指代python内置的特殊方法/属性")
t = Test()
t._Test__attr
t._attr
t._Test__test()
t.__test__()
- __xxx命名,在类中定义方法/属性,是真正意义上的私有,需要通过name_mangling方式调用
- _xxx命名,在类中定义方法/属性,是属于约定上的私有,可以直接调用
-
xxx命名,通常指代python中的特殊方法/属性,可以直接调用
_var = 10
__var__ = 10
- 当使用from module import * 导入时,_var变量并不会导入
- 当使用from module import *导入时,var变量并不会被导入
- 当使用import module导入时,可以通过module._var和module.var访问上述两个变量