Python
  • 01、基础篇
    • Python基础篇-001. Python简介
    • Python基础篇-002. Hello World
    • Python基础篇-003. 变量类型(一)
    • Python基础篇-004. 常量
    • Python基础篇-005. 运算符
    • Python基础篇-006. 条件语句
    • Python基础篇-007. 循环语句
    • Python基础篇-008. 变量类型(二)
    • Python基础篇-009. 函数(一)
    • Python基础篇-010. 函数(二)
    • Python基础篇-011. 变量作用域
    • Python基础篇-012. 自定义类(一)
    • Python基础篇-013. 自定义类(二)
    • Python基础篇-014. 模块
    • Python基础篇-015. 异常处理
  • 02、进阶篇
    • Python进阶篇-001. 文件IO
    • Python进阶篇-002. main.py
    • Python进阶篇-003. init.py
    • Python进阶篇-004. all
    • Python进阶篇-005. private
    • Python进阶篇-006. lambda表达式
    • Python进阶篇-007. 推导式
    • Python进阶篇-008. 迭代器
    • Python进阶篇-009. 生成器
    • Python进阶篇-010. 多线程
    • Python进阶篇-011. 数据处理基础函数(一)
    • Python进阶篇-012. 数据处理基础函数(二)
    • Python进阶篇-013. 包管理(一)
    • Python进阶篇-014. 包管理(二)
    • Python进阶篇-015. 包管理(三)
    • Python进阶篇-016. 包管理(四)
    • Python进阶篇-017. requirements.txt
    • Python进阶篇-018. venv
    • Python进阶篇-019. 头部注释
    • Python进阶篇-020. 优雅传参
    • Python进阶篇-021. 连接MySQL
  • 03、实践篇
    • Python实践篇-001. GitBook小工具(一)
    • Python实践篇-002. GitBook小工具(二)
Powered by GitBook
On this page
  • 一、创作声明
  • 二、__all__
  • 三、__all__示例
  • 四、注意事项
  • 五、写在最后
  1. 02、进阶篇

Python进阶篇-004. all

[toc]

一、创作声明

进阶篇是对基础篇的补充,这里面更多的是各种常用库、高级语法糖的教程,因此,进阶篇的内容会比较零碎。在创作过程中,同样会借助ChatGPT来辅助。

二、__all__

在Python中,__all__是一个特殊的变量,用于定义模块中可以被导入的公共接口。它是一个包含字符串的列表,指定了模块中可以被其他模块导入的对象。

__all__的作用是限制模块的公共接口,避免不必要的导入和暴露。当其他模块使用from module import *语句导入模块时,只有在__all__列表中的对象才会被导入。

三、__all__示例

下面是一个例子,演示了__all__的使用:

# module.py
def public_function():
    print("This is a public function.")

def _private_function():
    print("This is a private function.")

public_variable = 10
_private_variable = 20

__all__ = ['public_function', 'public_variable']

在上面的例子中,module.py模块定义了一个公共函数public_function和一个公共变量public_variable。同时,还定义了一个私有函数_private_function和一个私有变量_private_variable。

如果在其他模块中使用from module import *语句导入module.py模块,只有public_function和public_variable会被导入,而私有函数和私有变量则不会被导入。

# main.py
from module import *

public_function()  # 可以正常调用
_private_function()  # 会报错,因为私有函数没有被导入

print(public_variable)  # 可以正常访问
print(_private_variable)  # 会报错,因为私有变量没有被导入

通过使用__all__变量,我们可以明确指定模块中的公共接口,提供了更好的模块封装和代码维护的方式。

四、注意事项

在Python中,__all__是一个可选的列表,用于定义模块中导出的公共接口。如果你希望在导入模块时只导入指定的变量、函数或类,可以在模块的__init__.py文件中定义__all__列表。

然而,将__all__定义在__init__.py中并不是强制要求的。你也可以将其定义在模块的其他地方,例如模块的顶层或其他文件中。只要在导入模块时,Python解释器能够找到并正确解析__all__列表,就可以实现限制导入的效果。

需要注意的是,__all__列表只对from module import *形式的导入语句起作用,对于显式导入(例如import module或from module import name)不会有影响。另外,__all__列表只是一种约定,它并不会强制限制访问模块中未在列表中定义的内容。

五、写在最后

更多技术分享,点击传送门:https://github.com/maxiaolu66/profile

PreviousPython进阶篇-003. init.pyNextPython进阶篇-005. private

Last updated 1 year ago