文章详情页
Python 的 __all__ 为什么不能防止「不被导出的内容, 就不能访问」?
问题描述
实际现象期待 __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中没有什么是真正私有的
排行榜