python實現(xiàn)控制模塊可以導(dǎo)出的內(nèi)容
更新時間:2025年09月12日 08:54:45 作者:無風聽海
Python模塊通過__all__列表控制import*導(dǎo)出內(nèi)容,使用_前綴隱藏內(nèi)部函數(shù),__magic__為特殊符號,推薦明確API并合理使用命名空間
在 Python 中,我們可以通過在模塊中定義 __all__ 列表,控制該模塊通過 from module import * 導(dǎo)出的內(nèi)容。
1. 使用__all__控制導(dǎo)出
# 文件:my_module.py
__all__ = ['func1', 'MyClass'] # 只允許導(dǎo)出這些
def func1():
pass
def func2():
pass # 不會被 * 導(dǎo)入
class MyClass:
pass
然后在其他地方:
from my_module import * func1() # ? 可以使用 MyClass() # ? 可以使用 func2() # ? NameError: name 'func2' is not defined
說明:
__all__是一個字符串列表,定義了從這個模塊使用from xxx import *時,能導(dǎo)入的名稱。- 對
import my_module和from my_module import func2沒有影響,它們?nèi)匀豢梢栽L問不在__all__中的成員。
2. 手動控制命名空間
如果你不想別人通過 from my_module import * 看到你內(nèi)部函數(shù),可以:
def _internal_helper():
# 這是內(nèi)部函數(shù),不打算對外暴露
...
def public_func():
...
在 Python 中,以單下劃線開頭的變量或函數(shù)名(如 _internal_helper)默認不會被 import * 導(dǎo)入。
3. 私有 vs 公有符號建議
| 名稱形式 | 是否默認導(dǎo)出(被 * 看到) | 用途建議 |
|---|---|---|
| func1 | ? 是 | 公共 API |
| _helper_func | ? 否 | 模塊內(nèi)部工具函數(shù) |
| __magic__ | ? Python 保留 | 特殊用途 |
| __all__ | ? 手動控制 | 導(dǎo)出白名單 |
示例:更完整的模塊設(shè)計
# mymath.py
__all__ = ['add', 'multiply']
def add(x, y):
return x + y
def multiply(x, y):
return x * y
def _debug_log(x):
print(f"Debug: {x}")
用戶代碼:
from mymath import * add(2, 3) # ? multiply(2, 3) # ? _debug_log(1) # ? NameError
總結(jié)
| 控制方式 | 效果 | 推薦使用場景 |
|---|---|---|
| __all__ = [...] | 限制 import * 能導(dǎo)出的內(nèi)容 | 公開 API 明確時 |
| 前綴 _ | 默認隱藏,不導(dǎo)出 | 工具函數(shù)、私有變量 |
| import xxx | 無限制,訪問完整模塊命名空間 | 推薦日常用法 |
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python實現(xiàn)提取給定網(wǎng)頁內(nèi)的所有鏈接
這篇文章主要和大家分享一個實用的Python腳本,可以實現(xiàn)從給定的網(wǎng)頁中檢索所有鏈接,并將其保存為txt文件,需要的小伙伴可以收藏一下2023-05-05
pytorch實現(xiàn)特殊的Module--Sqeuential三種寫法
今天小編就為大家分享一篇pytorch實現(xiàn)特殊的Module--Sqeuential三種寫法。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01

