Python 您是否需要使用_init__u;.py从包中的模块干净地导入类?

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的包,其中一个名为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
但理想情况下,我希望能够

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