can';t访问Python中导入的函数
有人能帮我吗 我将继续使用PyDev Aptana开发python代码。以下是我在PyDev IDE下的项目结构:can';t访问Python中导入的函数,python,import,pydev,aptana,Python,Import,Pydev,Aptana,有人能帮我吗 我将继续使用PyDev Aptana开发python代码。以下是我在PyDev IDE下的项目结构: /testProject /src /testModule __init__.py testMod.py main.py testMod.py文件: def test(n): print "echo"+n import testModule testModul
/testProject
/src
/testModule
__init__.py
testMod.py
main.py
testMod.py文件:
def test(n):
print "echo"+n
import testModule
testModule.test(4)
main.py文件:
def test(n):
print "echo"+n
import testModule
testModule.test(4)
当我尝试在PyDev中运行此测试时,它在main.py的第2行(其中调用了测试(4))给出了以下错误:
我将main.py更改为:
import testModule.test
testModule.test(4)
仍然给我错误“模块”对象不可调用代码>
这有什么问题?您错过了testMod
模块。您的方法的全名是testModule.testMod.test
这基本上是因为testModule
中没有方法test()
。实际上,您的testModule
不是模块,而是一个包,而testMod
是testModule
包中的一个模块
因此,根据您的结构,以下内容将起作用:
from testModule import testMod
testMod.test(4)
有关更多详细信息,请参见,具体来说,testMod
单独指的是\uuuu init\uuuuuu.py
(可用于轻松提供整个软件包API的有限但有用的子集)。我不同意这一点。包裹就是包裹。包是作为模块集合的特定目录,在本例中就是这样。可能有人会说,\uuuuu init\uuuu
是一个模块(尽管我不这么认为),但从testModule开始,通常不会将testModule称为模块。有关术语,请参见。Python之所以将包视为模块,是因为\uuuu init\uuuu
将内容加载到testModule
命名空间中,这并不意味着它不是一个包,对吧?这让人感到困惑。。。我的基本直觉是,模块是函数def等的集合,我们定义用于特殊项目。如果我们想让不同的模块具有相同的名称,我们就定义了包,因此不同包下的一个模块是不相同的,但是具有相似的名称,因为它们所做的事情是相同的。