python中的下划线
已有 709 次阅读2017-6-5 13:17
|
python
原文:https://foofish.net/python.html
问题1:下划线变量
单下划线开头的变量,Pyhthon规定为内部变量(私有变量),from M import * 时,这种变量并不会导入进来
双下划线开头的变量,它在模块中还是当作单下划线看待,但出现在类中作为类属性就不一样了,在运行时该类属性会被“混淆",不能直接访问,需要在该变量前加上下划线和类名才能访问。
例如
class Foo(object):
boo = 40
_boo = 50
__boo = 60 # _Foo__boo
def __init__(self):
self.__booo = 70
def __test(self): #_Foo__test
print "__test"
if __name__ == '__main__':
print Foo.boo
print Foo._boo
print Foo._Foo__boo
foo = Foo()
print foo._Foo__booo
foo._Foo__test()
这样可以防止与父类或子类中同名的__xxx属性发生冲突。--------没看懂
开始和结尾都有的双下划线的变量:此类变量属于魔法对象,如:init,file,你永远不要自己也发明个出来
问二:all__all__对象是装有字符串的列表对象,他会覆盖 from import * 的默认行为:如
#foo.py
__all__ = ['bar', 'baz']
waz = 5
bar = 10
def baz(): return 'baz'
from foo import *
print bar
print baz
# 异常
print waz
在foo.py里面定义了__all__后,import * 就会按照 __all__定义的内容导入,所以这里 print
waz就抛异常了,因为它不在 __all__里面。为外,你可以把下划线开头的变量的字符串形式加入到__all__中,这样 import *
也能看到这些变量。