未定义Python自定义模块名称

时间:2016-12-21 21:48:39

标签: python python-3.x module package

我有一个名为' package'的自定义软件包。和该软件包中的自定义模块名为' module'它有一个功能返回'测试'什么时候叫。当我导入我的包时:

from package import module

一切正常,但如果我这样做:

from package import *

或者

import package

然后尝试使用'模块'模块出现错误名称' module'没有定义。当我使用import *或导入包时,为什么不导入模块?

我试图调用的模块中的代码是:

def printTest():
    return("Test")

调用模块的文件中的代码是:

import package

print(module.printTest())

1 个答案:

答案 0 :(得分:0)

这是一个令人惊讶的普遍问题,这个问题仍然没有适当的答案,所以我们开始吧。

假设我们只有一个内部带有功能的模块,例如:

  • 文件 app / foo.py

    def a():
        print('Hello from foo.a')
    
    def b():
        print('Hello from foo.b')
    

我真的希望这可以工作(但不要):

  • 文件 app / bar.py

    import app.foo
    
    # These will not work!
    foo.a()
    foo.b()
    

事实证明,您必须显式导入每个元素或给app.foo命名:

  • 导入所有内容(通常被认为是不好的做法):

    from app.foo import *
    
    # Both will work fine
    a()
    b()
    
  • 仅导入您想要的内容:

    from app.foo import b
    
    # This will work
    b()
    
    # But this will not
    a()
    
  • app.foo一个(好的)名称:

    import app.foo as baz
    
    # Both will work as expected
    baz.a()
    baz.b()
    

即使上面的示例仅使用函数,它对于在模块最顶层范围内声明的所有内容(如类或变量)也完全相同。

希望有帮助!