__all__通常用于项目中的引用保护。
定义aa.py文件如下:
def a1():
print('a1 from aa.py')
def a2():
print('a2 from aa.py')
定义bb.py文件如下:
from aa import * a1() a2()
执行bb.py,得到输出:
a1 from aa.py a2 from aa.py
将aa.py修改为
__all__ = ['a1']
def a1():
print('a1 from aa.py')
def a2():
print('a2 from aa.py')
此时执行bb.py,得到输出:
a1 from aa.py Traceback (most recent call last): File "bb.py", line 4, ina2() NameError: name 'a2' is not defined
将bb.py修改为:
from aa import a1, a2 # IDE一般会提示 "'a2' is not declared in __all__" a1() a2()
执行bb.py,得到输出:
a1 from aa.py a2 from aa.py
由此可见__all__可以作为一种import的保护机制,另外from ... import ...的形式不会受__all__的影响。不过在项目中最好还是采用from module import func1, func2的形式,这样会更加规范,可读性也会更好。
博主会持续更新一些人工智能领域的知识和实践、工作中遇到的问题和感悟、高效工作的方法和技巧,如果喜欢请关注、点赞、收藏支持



