114.模块中的__all__

Posted kangwenju

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了114.模块中的__all__相关的知识,希望对你有一定的参考价值。

模块中的__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()

 

以上是关于114.模块中的__all__的主要内容,如果未能解决你的问题,请参考以下文章

python模块中的_all__属性的作用

python模块中的_all__属性的作用

模块中的__all__的作用

python中模块的__all__属性

python中模块的__all__详细使用

Python中的 __all__和__path__ 解析