搜尋

首頁  >  問答  >  主體

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

環境

#
大家讲道理大家讲道理2754 天前744

全部回覆(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
  • 取消回覆