在Python编程语言中,模块是组织代码的基本单元。当我们导入一个模块时,有时希望控制哪些内容可以被外部访问。这就是`__all__`属性的作用。`__all__`是一个特殊属性,它允许开发者指定模块中哪些公开的名称(变量、函数、类等)可以在`from module import *`语句中被导入。 默认情况下,当执行`from module import *`时,Python会导入模块中所有不以单下划线`_`或双下划线`__`开头的公开名称。但是,如果模块定义了`__all__`属性,那么`from module import *`只会导入`__all__`列表中的名称。 例如,我们有一个名为`kk.py`的模块: ```python class A(): def __init__(self,name,age): self.name=name self.age=age class B(): def __init__(self,name,id): self.name=name self.id=id def func(): print 'func() is called!' def func1(): print 'func1() is called!' ``` 如果我们没有定义`__all__`,其他模块可以通过`from kk import *`导入所有公开的类和函数: ```python from kk import * a = A('python', '24') print(a.name, a.age) b = B('python', 123456) print(b.name, b.id) func() func1() ``` 现在,如果我们为`kk.py`添加`__all__`属性: ```python __all__ = ('A', 'func') ``` 那么,当我们再次尝试`from kk import *`时,只有`__all__`列表中的`A`类和`func`函数会被导入: ```python from kk import * a = A('python', '24') print(a.name, a.age) func() # func1() # 这将引发NameError,因为func1不在__all__中 ``` 需要注意的是,`__all__`并不影响直接通过`.`来访问模块成员。比如,即使没有在`__all__`中包含`B`,仍然可以直接使用`kk.B`来访问。 此外,`__all__`并不影响以单下划线`_`或双下划线`__`开头的成员。Python约定,以单下划线开头的成员被认为是受保护的(protected),而以双下划线开头的成员被认为是私有的(private)。它们通常不应直接在外部模块中使用,除非明确地将它们放入`__all__`中。 例如,如果我们有以下模块: ```python def func(): print 'func() is called!' def _func(): print '_func() is called!' def __func(): print '__func() is called!' _A = type('A', (object,), {'name': None}) # 创建一个以单下划线开头的类 __all__ = ('func', '__func', '_A') ``` 然后在其他模块中: ```python from kk import * func() # 可以导入 # _func() # NameError,因为即使在__all__中,单下划线的成员依然不能直接导入 # __func() # NameError,双下划线的成员始终不能直接导入 ``` `__all__`属性是Python中用来控制模块导入行为的关键工具,它可以帮助你保持代码的整洁和封装性,防止意外地暴露内部实现细节。通过正确使用`__all__`,可以更好地管理和维护大型项目中的导入行为,提高代码的可读性和可维护性。
- 粉丝: 20
- 资源: 954
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 焊接应力与变形.ppt
- 焊接缺陷检验方法.ppt
- 焊接热影响区组织和性能(PPT).ppt
- 焊接应力与焊接变形讲稿.ppt
- 焊接应力与变形的产生.ppt
- 焊接与热处理.ppt
- 换热设备典型焊接结构设计分析.ppt
- 焊接质量控制和检验 2011年压力管道检验师培训课件.ppt
- 金属的焊接性及焊接结构设计.ppt
- 设备工业管道焊接施工及验收设备培训课件.ppt
- 容器制造中的焊接和热处理.ppt
- 压力管道焊接 2011年压力管道检验师培训课件.ppt
- 压力容器焊接技术要求.ppt
- 压力容器制造单位焊接责任工程师培训考核.ppt
- 压力容器焊接常识.ppt
- 用QC方法提高大直径不锈钢薄壁容器焊接质量.ppt