代码之家  ›  专栏  ›  技术社区  ›  Jim Jeffries

python导入故障

  •  0
  • Jim Jeffries  · 技术社区  · 14 年前

    从特定模块导入类时遇到一些问题。该类位于模块my模块1.my模块2.my模块3.my模块4.my模块5.my模块6.my模块7中

    此代码有效

    import my_module1.my_module2.my_module3.my_module4.my_module5.my_module6.my_module7
    

    这意味着我要去上课

    my_module1.my_module2.my_module3.my_module4.my_module5.my_module6.my_module7.MyClass
    

    但这不是

    from my_module1.my_module2.my_module3.my_module4.my_module5.my_module6.my_module7 import MyClass
    

    这也不是

    导入我的模块1.my模块2.my模块3.my模块4.my模块5.my模块6.my模块7作为我的名称

    两人都会说这个错误

    AttributeError: 'module' object has no attribute my_module7'
    

    这让我很困惑,我已经为此工作了几个星期了。有什么建议吗?

    编辑-不幸的是,我不能更改结构,因为它是由我使用的系统强加的

    2 回复  |  直到 14 年前
        1
  •  3
  •   toc777    14 年前

    看起来像是循环导入。

    戈登·麦克米兰说: 当两个模块都使用导入表单时,循环导入很好。当第二个模块想要从第一个模块(从模块导入名称)中获取一个名称,并且导入处于顶层时,它们会失败。这是因为第一个模块中的名称尚不可用,因为第一个模块正忙于导入第二个模块。

        2
  •  0
  •   Chris Pfohl    14 年前

    我认为您可能首先要考虑一种替代设计(重新设计模块分解,使其更平坦),但这不是您的问题,请尝试:

    import my_module1.my_module2.my_modu...<etc>
    my_name = my_module1.my_module2.my_modu...<etc>
    my_name.MyClass
    

    模块是Python中的第一类对象,因此可以使用变量对其进行别名。