我试图理解Python(v2.7)导入机制的最佳实践是什么。我有一个项目已经开始有点增长,假设我的代码组织如下:
foo/
__init__.py
Foo.py
module1.py
module2.py
module3.py
包名称为foo
,其中有模块Foo.py
,其中包含类Foo
的代码。因此,我使用相同的名称用于包、模块和类,这可能不是很明智。
__init__.py
为空,类Foo
需要导入module1、module2和module3
,因此我的Foo.py
文件的一部分看起来像:
# foo/Foo.py
import module1
import module2
import module3
class Foo(object):
def __init__(self):
....
....
if __name__ == '__main__':
foo_obj = Foo()
然而,后来我重新审视了这一点,并认为将所有导入放在__init__.py
文件中会更好。因此,我的__init__.py
现在看起来如下所示:
# foo/__init__.py
import Foo
import module1
import module2
import module3
....
....
我的Foo.py
只需要导入foo
:
# foo/Foo.py
import foo
虽然这看起来很方便,因为只有一行代码,但我有点担心它可能会创建循环引用。我的意思是,当运行脚本Foo.py
时,它会导入所有它可以找到的东西,然后调用__init__.py
,它将再次导入Foo.py
(是否正确?)。此外,将包、模块和类使用相同名称会使事情更加混乱。
这么做有意义吗?或者我在自找麻烦吗?
import module1
)。 - Brendan Abelif __name__ == '__main__':
的脚本,以防止相对导入出现问题? - VimNing