classFoo(object):defpublic_method(self):print'This is public method'def__fullprivate_method(self):print'This is double underscore leading method'def_halfprivate_method(self):print'This is one underscore leading method'
foo=Foo() #OK
foo.public_method() #OK
foo.__fullprivate_method() #NG
foo._halfprivate_method() #OK
学习Python的都知道,Python没有绝对的私有化,Python本身没有任何机制阻止你使用带有__和_的变量,一切全靠自觉
比如:一定要访问__fullprivate_method()呢?
方法:foo._Foo__fullprivate_method() #OK
单下划线(_) 主要用于模块级私有化
test.py(定义两个变量)
_value0="it is one underscorce variable"
value1="it is public variable"
main.py
from test import *
if __name__=='__main__':
print _value0 # NameError: name '_value0' is not definedprint value1 # OK
结论:通过“from mymodule import *”导入时,不可以导入单下划线属性
比如:如果一定要访问_value0变量呢?
方法:
from test import * ---->改成from test import _value0