Python中__all__必须为列表类型吗?用元组定义有何弊端?
Python
__all__ 用元组定义的相关问题解答 - 用元组定义
__all__不存在任何功能性缺陷
Python对__all__的要求仅为「存储模块公开导出名称的字符串序列」,元组作为不可变序列完全满足这个要求。不管是from xxx import *的默认导出逻辑,还是mypy、pylint这类静态检查工具,或是IDE的代码补全逻辑,都能正常识别元组形式的__all__,不存在兼容性问题。 - 实际开发中 完全不需要
__all__具备可变性__all__本质是模块级的接口配置,用来声明模块对外暴露的公开成员,正常情况下模块加载完成后就不应该被改动。运行时动态修改__all__属于典型的反模式,会让模块的对外接口变得不可预测,大幅提升代码的理解和维护成本。
绝大多数开发者习惯用列表定义__all__纯粹是历史习惯导致的:早期Python官方示例、入门教程普遍采用列表写法,后续开发者沿用惯例就成了通用写法,并非列表有什么不可替代的技术优势。
甚至从语义匹配度来说,不可变的元组反而更适合__all__的场景,能从语法层面避免运行时意外篡改导出配置的问题。
内容的提问来源于stack exchange,提问作者Martin Thoma
相关产品推荐
相关产品推荐

