首页 >后端开发 >Python教程 >Python的`__all__`如何通过`from import *`控制模块导入?

Python的`__all__`如何通过`from import *`控制模块导入?

Patricia Arquette
Patricia Arquette原创
2024-12-12 18:00:25841浏览

How Does Python's `__all__` Control Module Imports with `from  import *`?

揭示“__all__”在Python中的作用

“__init__.py”文件中的“__all__”列表起着关键作用当使用“from import *”时控制导出哪些符号module.

具体来说,“__all__”定义了一个字符串列表,这些字符串表示模块中使用“import *”通配符语法时可访问的符号。例如,考虑名为“foo.py”的模块中的以下代码:

__all__ = ['bar', 'baz']

waz = 5
bar = 10
def baz(): return 'baz'

在此示例中,符号“bar”和“baz”是使用“__all__”显式导出的。因此,当您使用“from foo import *”导入“foo”模块时,只有这两个符号可用。所有其他符号,例如“waz”,都将被隐藏。

from foo import *

print(bar)
print(baz())

# Attempting to access "waz" will raise an exception.
print(waz)

如果注释掉“__all__”列表,则默认导入行为生效,其中所有不以下划线开头的符号是进口的。在这种情况下,导入语句将成功,并且“waz”也将可以访问。

# Comment out __all__

from foo import *

print(bar)
print(baz())
print(waz)

需要注意的是,“__all__”仅影响“from import *”语法。 “__all__”中未提及的成员仍然可以通过使用特定的导入语句从模块外部访问,例如“from import ”。

以上是Python的`__all__`如何通过`from import *`控制模块导入?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn