搜索

首页  >  问答  >  正文

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

实际现象

  1. 期待 __all__ 能控制模块的访问

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

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

预期现象

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

问题

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

相关代码

__all__ = ('a', 'b', )

a = 1 
b = 2 
c = 3    # 不希望别人访问 
import base
                                                                                                            
print(base.c)
3

环境

大家讲道理大家讲道理2751 天前740

全部回复(2)我来回复

  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-18 10:52:54

    test.py 文件改为

    from base import *
    
    print a
    print b
    print c

    结果如下:

    ❯ python test.py                                                                                                                                                                                                                            ⏎
    1
    2
    Traceback (most recent call last):
      File "test.py", line 8, in <module>
        print c
    NameError: name 'c' is not defined

    回复
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-18 10:52:54

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

    回复
    0
  • 取消回复