有些东西我没有理解python导入。我读过几十篇文章,但我找不到满意的答案。情况是这样的:
我正在写一个由几个模块组成的包。假设包名为pack1
。在__init__.py
文件中,为了公开我在模块中定义的类和函数,我写道:
from .module1 import *
from .module2 import *
...
现在,在模块1中:
from math import sqrt # a tool that I need
class class1:
<body>
class class2:
<body>
....
class class100:
<body>
我的问题是,当我
import pack1
在另一个项目中,我在sqrt
的命名空间中看到了pack1
。我是否必须在__init__.py
文件中分别导入100个类中的每一个,以避免这种情况并保持我的名称空间清洁?我是否必须对__init__.py
中的inspect模块进行一些破解,以便识别已定义但未导入的类(我认为这会非常难看)?或者,正如我怀疑的那样,我错误地说我应该如何处理模块结构或导入语句?
答案 0 :(得分:1)
通配符导入导入该模块中全局命名空间中定义的所有。它不区分“本地”类,导入的模块,函数或变量。
有两种解决方法:
import this
变量来准确定义模块通配符导入时应导入的内容。请参阅Can someone explain __all__ in Python?