【发布时间】:2018-04-01 03:49:59
【问题描述】:
当我看到 numpy\__init__.py 库中的代码后尝试编写自己的 __init__.py 时,我感到很困惑。
这里是 numpy\__init__.py 代码 sn-p
__all__.extend(['__version__', 'pkgload', 'PackageLoader',
'show_config'])
__all__.extend(core.__all__)
__all__.extend(_mat.__all__)
__all__.extend(lib.__all__)
__all__.extend(['linalg', 'fft', 'random', 'ctypeslib', 'ma'])
而我的目录结构是:
应用程序/
......test.py
......lib1\
............ __init__.py
............ Lib1File.py
............ sublib1\
……………………__init__.py
……………………SubLib1File.py
test.py中的代码是
from lib1 import *
if __name__ == "__main__":
result1 = Lib1File.add(10, 15) # a simple function in Lib1File.py
print(result1)
result2 = Sublib1File.mul(10,15) # a simple function in Sublib1File.py
print(result2)
lib1\__init__.py 中的代码是
from . import sublib1
__all__ = ["Lib1File"]
__all__.extend(sublib1.__all__)
print(__all__) # it can print ['Lib1File', 'Sublib1File'] on console
lib1\sublib1\__init__.py 中的代码是
__all__ = ["Sublib1File"]
但是当我运行 test.py 时,我得到了一个错误
*文件“test.py”,第 1 行,在模块中从 lib1 导入 。 AttributeError: 模块 'lib1' 没有属性 'Sublib1File'
我的问题是
为什么即使在 lib1\__init__.py 中
__all__ = ['Lib1File', 'Sublib1File']也会出现此错误?如果我仍然只使用一个导入
from lib1 import *,我应该如何解决它?如果我们不能解决问题2,那么在numpy\__init__中
__all__.extend(...)的目的是什么?
【问题讨论】: