我的目录结构是这样的:
└── stuff
├── __init__.py
└── substuff
├── imp.py
└── __init__.py
stuff/__init__.py
看起来如下:
from stuff.substuff.imp import foo, bar
和 stuff/substuff/__init__.py
像这样:
from stuff.substuff.imp import foo, bar
__all__ = [
'foo',
'bar'
]
stuff/substuff/imp.py
包含
import pandas as pd
import numpy as np
__all__ = ['foo', 'bar']
def foo():
return {'foo': np.sqrt(2)}
def bar():
return ('bar', 'xyz')
def _helper():
return True
如果我现在做
from stuff.substuff import imp
并检查可用于 imp
的内容,我看到 bar
、foo
,还有 pd
和 np
.
我怎样才能让用户只看到bar
和foo
,而看不到pd
和np
?一种解决方案似乎是将它们导入为 _pd
和 _np
,但我想知道是否有比这更“漂亮”的解决方案。
最佳答案
首先,请注意 __all__
不会阻止任何模块符号(函数、类等)被直接导入。检查这个惊人的 article更多细节。它只为 from stuff.substuff.imp import *
设置行为,而不是显式模块导入(docs)。
这个语句只会像你期望的那样导入 foo
和 bar
:
from stuff.substuff import *
此外,您已经限制了直接从 substuff
包导入到 foo
和 bar
:
from stuff.substuff import foo # successfully imported
from stuff.substuff import pd # import error
关于python - 如何定义模块的导入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57132688/