在这种情况下,如何拼写 Python 包/模块导入?



>我有这些 Python 文件

project/packages/foo/job.py
project/packages/foo/models.py
project/packages/foo/stuff/Thing.py

models.py 包含class Thing,Thing.py 包含与Thing相关的函数

job.py 尝试这样做:

from . import models
from . import stuff
def job ():
x = models.Thing (123)
stuff.Thing.related_function (x)

这会产生一个错误:

属性

错误:模块"foo.stuff"没有属性"事物">

我已经尝试了导入拼写的变体,但无法使其正常工作。我不想将Thing带入命名空间,但始终必须将其称为models.Thingstuff.Thing

我该怎么做?

添加__init__文件:

project/packages/foo/__init__.py
project/packages/foo/job.py
project/packages/foo/models.py
project/packages/foo/stuff/__init__.py
project/packages/foo/stuff/Thing.py

stuff包中,通过添加以下行来初始化子模块:

# in project/packages/foo/stuff/__init__.py file
from foo.stuff import Thing

其他__init__.py可以为空。

现在,在您的job.py代码中,models.Thing属性应该解析(它是一个类(,stuff.Thing属性应该解析(它是一个子模块(。

注意:在同一项目中,让模块名称与类匹配不是一个好的命名约定 - 这是不必要的混淆。 我建议将"与Thing相关的功能"的Thing子模块重命名为其他名称,也许是thing_helpers

最新更新