Python导入错误“模块‘工厂’没有属性‘模糊’”

Ato*_*tom 8 python testing python-import factory-boy

我是Factory_boy模块的新手。在我的代码中,我import factory然后使用此导入来访问模糊属性,factory.fuzzy然后它抛出 error module 'factory' has no attribute 'fuzzy'

我通过再次导入解决了这个问题
import factory from factory import fuzzy

这样做就没有错误。

这是什么原因啊!

小智 6

为什么会出现这种情况?

\n\n

当您导入Python模块(您的import factory)时,您可以直接访问该模块中声明的内容(例如factory.Factory):该模块中声明的所有符号都会自动导出。

\n\n

但是,如果嵌套模块未在其父模块中导入,则必须直接导入它。

\n\n

在这里,factory.Factory可用,因为factory/__init__.py包含:

\n\n
from .base import Factory\n
Run Code Online (Sandbox Code Playgroud)\n\n

=> 当您键入 时,Python 会查找中factory.Factory命名的符号,该符号(根据上面的行)是对中定义的类的引用。Factoryfactory/__init__.pyFactoryfactory/base.py

\n\n

from . import fuzzy由于in 中没有一行factory/__init__.py,Python 无法以这种方式加载它。

\n\n

但为什么不添加这一行呢?

\n\n

Factory_boy 包中的其他模块依赖于第三方包;\n例如factory.django导入 Django。如果factory/__init__.py包含该from . import django行(需要factory.django从 获得import factory),则运行的每个程序都import factory需要安装 Django。

\n\n

为了让包的用户决定他们依赖什么,选择尽可能不在包顶层添加这些直接导入 \xe2\x80\x94 这允许未来版本添加外部依赖项而不会破坏现有代码。

\n