python實(shí)現(xiàn)控制模塊可以導(dǎo)出的內(nèi)容
在 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)默認(rèn)不會被 import * 導(dǎo)入。
3. 私有 vs 公有符號建議
| 名稱形式 | 是否默認(rèn)導(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 明確時 |
| 前綴 _ | 默認(rèn)隱藏,不導(dǎo)出 | 工具函數(shù)、私有變量 |
| import xxx | 無限制,訪問完整模塊命名空間 | 推薦日常用法 |
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Pytorch卷積層手動初始化權(quán)值的實(shí)例
今天小編就為大家分享一篇Pytorch卷積層手動初始化權(quán)值的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08
Python基于socket模塊實(shí)現(xiàn)UDP通信功能示例
這篇文章主要介紹了Python基于socket模塊實(shí)現(xiàn)UDP通信功能,結(jié)合實(shí)例形式分析了Python使用socket模塊實(shí)現(xiàn)IPV4協(xié)議下的UDP通信客戶端與服務(wù)器端相關(guān)操作技巧,需要的朋友可以參考下2018-04-04
在Python IDLE 下調(diào)用anaconda中的庫教程
這篇文章主要介紹了在Python IDLE 下調(diào)用anaconda中的庫教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03
PyMongo 查詢數(shù)據(jù)的實(shí)現(xiàn)
本文主要介紹了PyMongo 查詢數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-06-06

