模块中的__all__
例如模块制作中自定义的hm_itcast.py
# 定义一个全局变量 name = "自定义模块" # 定义一个函数求和 def add2num(a, b): return a + b # 自定义一个人类 class Person(object): pass # 定义一个函数, 用于测试 def test(): # 测试全局变量 print(name) # 测试函数 ret = add2num(10, 20) print(ret) # 测试类 p = Person() print(p) # 解决方案 if __name__ == '__main__': # 调用函数 test()
没有__all__
如果hm_itcast.py中没有__all__,如果其他模块在导入hm_itcast.py时候,使用的from hm_itcast import *。
# 导入模块 from hm_itcast import * # 全局变量 print(name) # 函数 ret = add2num(10, 20) print(ret) # 类 p = Person() print(p)
有__all__
如果hm_itcast.py中有__all__,如果其他模块在导入hm_itcast.py时候,使用的from hm_itcast import *。
# __all__变量保存全局变量,函数,类的字符串名字 __all__ = ["name", "add2num"] # 定义一个全局变量 name = "自定义模块" # 定义一个函数求和 def add2num(a, b): return a + b # 自定义一个人类 class Person(object): pass # 定义一个函数, 用于测试 def test(): # 测试全局变量 print(name) # 测试函数 ret = add2num(10, 20) print(ret) # 测试类 p = Person() print(p) # 解决方案 if __name__ == '__main__': # 调用函数 test()
如果一个模块中有__all__变量,那么也就意味着这个变量中的元素,不会被from 模块名 import *时导入。
例子:
# 模块中的__all__ 配合模块导入 from 模块名 import *使用的 from hm_itcast import * print(name) print(add2num(10, 10)) # print(Person()) import hm_itcast print(hm_itcast.Person())
模块代码:
# 主要对模块使用者 使用from 模块名 import *进行约束 __all__ = ["name", "add2num"] # 定义一个全局变量 name = "自定义模块" # 函数 def add2num(a, b): return a + b # 自定义人类 class Person(object): pass # 程序员需要对自己定义的模块需要进行自测 def tt(): print(name) print(add2num(10, 20)) print(Person()) # 执行tt() 是程序员在自测需要执行的代码 # 如果被其他模块导入 那么不应该执行tt() # __name__的数值变化 # 如果直接运行此模块 # __name__ = __main__ # 如果被导入使用的时候 # __name__ = hm_itcast # 判断程序的入口 if __name__ == '__main__': tt()