在Python中,__all__
是一个模块级别的变量,用于定义模块的公共接口。它是一个字符串列表,列出了模块中应该被视为公共的名称(函数、类、变量等)。
当使用from module import *
语句导入模块时,只有__all__
列表中列出的名称才会被导入。如果模块中没有定义__all__
,则使用from module import *
会导入模块中除了以下几种情况之外的所有名称:
- 以下划线_
开头的名称(通常被视为私有名称)。
- 被__name__
属性定义为私有属性的名称(例如,__name__
的值为__main__
时的一些特殊处理)。
以下是一个简单的示例:
# my_module.py
__all__ = ["public_function", "PublicClass"]
def public_function():
print("This is a public function")
def _private_function():
print("This is a private function")
class PublicClass:
def __init__(self):
print("This is a public class")
class _PrivateClass:
def __init__(self):
print("This is a private class")
在另一个模块中:
from my_module import *
public_function() # 可以正常调用
PublicClass() # 可以正常实例化
_private_function() # 会引发 NameError,因为没有被导入
_PrivateClass() # 会引发 NameError,因为没有被导入
使用__all__
可以更好地控制模块的公共接口,使得模块的使用者能够清楚地知道哪些是可以使用的部分,同时也有助于模块的维护和代码的整洁。