Python 您是否需要使用_init__u;.py从包中的模块干净地导入类?
假设我有一个src文件夹和一个名为Foo的包,其中一个名为Foo的模块包含一个名为Foo的类。然后在src文件夹中,我有一个主模块,它希望Foo类直接位于其名称空间中Python 您是否需要使用_init__u;.py从包中的模块干净地导入类?,python,python-module,Python,Python Module,假设我有一个src文件夹和一个名为Foo的包,其中一个名为Foo的模块包含一个名为Foo的类。然后在src文件夹中,我有一个主模块,它希望Foo类直接位于其名称空间中 -src -Foo __init__.py Foo.py main.py 我相信我可以这样做 main.py from Foo.Foo import Foo 或者将其添加到包init中 import Foo 或 那么大体上我可以试试 from Foo import Foo
-src
-Foo
__init__.py
Foo.py
main.py
我相信我可以这样做
main.py
from Foo.Foo import Foo
或者将其添加到包init中
import Foo
或
那么大体上我可以试试
from Foo import Foo
但理想情况下,我希望能够
import Foo
在main.py中,并将该类直接作为Foo(而不是Foo.Foo)提供
也许对包、模块和类进行同样的命名并不是一种最佳做法,但似乎我遇到过这样的情况:命名是有意义的。我也知道我可能应该将模块名全部改为小写,但我在本例中保留了这样的名称。您需要使用
\uuuu init\uuuuuuuuupy
使Python将文件夹识别为一个模块,其中包含可以导入的文件或模块。因此,
- 不,从技术上讲,您不需要它来导入类——您可以从myfile导入myclass
- 但是,考虑到您的结构,您确实需要有
,以便对于\uuu init\uuuu.py
文件夹之外的模块,它将被识别为可导入模块Foo
导入Foo
导入类而不是模块。你在最后一段所说的是正确的。为什么你觉得你需要一个包裹?如果您只是使用一个模块,那么来自foodule import Foo的就足够简短了。这是有道理的。我想把东西保存在包中似乎是个好主意。也许我在想一个包,其中类本身依赖于其他模块,甚至可能依赖于其中的子包,并且能够导入该类。例如,如果我有一个用于连接sql alchemy中的db的包,并且该类使用从包中的模块导入的模型。包中的内容越多,让导入包
神奇地导入其中一个内容而不是导入实际包的意义就越小。如果您需要一个包来容纳多个模块,很好,但是您需要说明您要导入哪些模块,或者您要从每个模块导入哪些内容。只要试着用一个合适的命名方案以正常的python方式来做就行了。我想你会发现,在你的程序顶部执行一次从foomodule import Foo导入Foo
的其实并不难。我理解文件的作用以及为什么需要制作一个包,只是感觉如果它在一个包和模块中,我应该能够更轻松地完成这个类。
import Foo