現在需要開發一個外掛系統。插件系統所有人都可以寫PY檔案即可載入。但是需要引入主程式的庫 例如
# test.py
from lib.function import *
...
如何防止使用者存取lib裡面的其他方法或變數呢?
all 如果加上名稱,我主程式需要呼叫所有*的話,可以嗎?
欧阳克2017-06-12 09:27:57
在python
並沒有真正的私有變數或方法, 所以基本上是無法阻止別人存取另一個模組的方法或變數, 但是如果使用者是透過from lib.function import *
, 那麼我們可以透過__all__
屬性去設定*
能被import指定的變數或方法, 例如:
cat abc.py
__all__ = ['bar']
waz = 5
bar = 10
def baz(): return 'baz'
cat b2.py
from abc import *
print(dir())
# 输出:
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'bar']
可以看到在b2.py
的輸出, 並沒有bar
和baz
, 所以我們可以通過這種方式, 來做一個簡單的控制, 當然下劃線開頭的私有變量也限制了, 但這種限制對import abc這種引入方式無效