__name__
__name__是python的一个内置类属性,它天生就存在于一个 python 程序中,代表对应程序名称。
在test1.py中,并运行该文件:
def some_fun():
print(__name__)
some_fun()
#结果
#__main__
在test2.py中导入test1.py文件中some_fun函数,并运行some_fun函数:
from test import some_fun
some_fun()
#结果
#test1
因此通过判断__name__的值,就可以区分py文件是直接被运行,还是被引入其他程序中。
__all__
from bb import *
此方式只能导入公有的属性、方法、类;无法导入以单下划线开头(protected)或以双下划线开头(private)的属性、方法、类。
由于bb.py中使用了__all__=('A','func'),所以在别的模块导入该模块时,只能导入__all__中的变量、方法、类;
__all__=('func','__func','_A')
放入__all__中所有属性均可导入,即使是以下划线开头。虽然_func()、__func()属于protected ,private权限的,但是如果使用__all__是可以直接导入访问的 。也就是说可以通过这种方式导入public,protected,private。