我想使用一个简单的列表理解来__all__
为我的包中的模块设置。我注意到当我从自己的模块之一导入某些内容时,模块名称将添加到名称空间中,而不仅仅是添加的名称。与导入内置或第三方软件包时不同。
- foo
- __init__.py
- bar.py
- baz.py
__init__.py
import os as _os
from numpy.random import randint as _randint
import foo.bar as _bar
from foo.baz import foobar
__all__ = [x for x in globals() if not x.startswith('_')]
我预计:
>>> import foo
>>> foo.__all__
['foobar']
但是我得到:
>>> import foo
>>> foo.__all__
['bar', 'baz', 'foobar']
我知道我可以扩展列表理解__all__
以过滤掉,ModuleType
但是我想知道为什么行为对于我自己的模块是不同的。我真的很希望能够使用领先的下划线来处理此问题,就像处理其他软件包一样。我也尝试使用dir()
,locals()
和vars()
来代替,globals()
但结果是相同的。
更新
出于好奇,我也进口foobar
到bar.py
和印刷globals()
并'bar'
没有被包括在内。因此,看来我的模块仅添加到__init__.py
文件内的名称空间中了吗?
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句