Python 的 __all__ 為什麼不能防止「不被匯出的內容, 就不能訪問」?
大家讲道理
大家讲道理 2017-05-18 10:50:54
0
2
759

實際現象

  1. 期待 __all__ 能控制模組的存取

  2. 依照社群契約, 私有的東西以_開頭, 但是最近發現有個同事調私有介面(我寫的模組)

  3. Python是靈活的語言, 不成文的規定是「約定大於配置」

#預期現象

  1. 搜尋了 __all__的資料, 還以為能滿足我的要求, 但是完全不能( 見下文 )

#問題

那麼, __all__好像一點用處都沒有?

相關程式碼

  • base.py

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

a = 1 
b = 2 
c = 3    # 不希望别人访问 
  • test.py

import base
                                                                                                            
print(base.c)
  • 輸出

3

環境

  • Python 2.7

#
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回覆(2)
过去多啦不再A梦

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
曾经蜡笔没有小新

在Python中沒有什麼是真正私有的

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板