>我有这些 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.Thing
或stuff.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
。