您的位置:首页技术文章
文章详情页

Python 的 __all__ 为什么不能防止「不被导出的内容, 就不能访问」?

【字号: 日期:2022-07-18 13:35:20浏览:18作者:猪猪

问题描述

实际现象

期待 __all__ 能控制模块的访问

按照社区契约, 私有的东西以_开头, 但是最近发现有个同事调私有接口(我写的模块)

Python是灵活的语言, 不成文的规定是「约定大于配置」

预期现象

搜索了 __all__的资料, 还以为能满足我的要求, 但是完全不能( 见下文 )

问题

那么, __all__好像一点用处都没有?

相关代码

base.py

__all__ = (’a’, ’b’, )a = 1 b = 2 c = 3 # 不希望别人访问

test.py

import base print(base.c)

输出

3环境

Python 2.7

问题解答

回答1:

test.py 文件改为

from base import *print aprint bprint c

结果如下:

❯ python test.py ⏎12Traceback (most recent call last): File 'test.py', line 8, in <module> print cNameError: name ’c’ is not defined回答2:

在Python中没有什么是真正私有的

标签: Python 编程