我有一个名为' package'的自定义软件包。和该软件包中的自定义模块名为' module'它有一个功能返回'测试'什么时候叫。当我导入我的包时:
from package import module
一切正常,但如果我这样做:
from package import *
或者
import package
然后尝试使用'模块'模块出现错误名称' module'没有定义。当我使用import *或导入包时,为什么不导入模块?
我试图调用的模块中的代码是:
def printTest():
return("Test")
调用模块的文件中的代码是:
import package
print(module.printTest())
答案 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()
即使上面的示例仅使用函数,它对于在模块最顶层范围内声明的所有内容(如类或变量)也完全相同。
希望有帮助!