現在需要開發一個外掛系統。插件系統所有人都可以寫PY檔案即可載入。但是需要引入主程式的庫 例如
# test.py from lib.function import * ...
如何防止使用者存取lib裡面的其他方法或變數呢?
all 如果加上名稱,我主程式需要呼叫所有*的話,可以嗎?
小伙看你根骨奇佳,潜力无限,来学PHP伐。
在python並沒有真正的私有變數或方法, 所以基本上是無法阻止別人存取另一個模組的方法或變數, 但是如果使用者是透過from lib.function import *, 那麼我們可以透過__all__ 屬性去設定*能被import指定的變數或方法, 例如:
python
from lib.function import *
__all__
*
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這種引入方式無效
b2.py
bar
baz
這種限制對import abc這種引入方式無效
在
python
並沒有真正的私有變數或方法, 所以基本上是無法阻止別人存取另一個模組的方法或變數, 但是如果使用者是透過from lib.function import *
, 那麼我們可以透過__all__
屬性去設定*
能被import指定的變數或方法, 例如:可以看到在
b2.py
的輸出, 並沒有bar
和baz
, 所以我們可以通過這種方式, 來做一個簡單的控制, 當然下劃線開頭的私有變量也限制了, 但這種限制對import abc這種引入方式無效