我是python的新手,并且一直在学习它。我有一个主文件
import Tests
from Tests import CashAMDSale
CashAMDSale.AMDSale()
和CashAMDSale
import pyodbc
import DataFunctions
import automa
from DataFunctions import *
from automa.api import *
def AMDSale():
AMDInstance = DataFunctions.GetValidAMD()
这是GetValidAMD
import pyodbc
def ValidAMD(GetValidAMD):
(short method talking to a database)
我的错误出现在AMDInstance = DataFunctions.GetValidAMD()
我收到错误AttributeError: 'module' object has no attribute 'GetValidAMD'
我已经查找并寻找答案,但没有任何效果。有任何想法吗?谢谢!
答案 0 :(得分:1)
创建文件foo.py
时,您将创建一个python模块。执行import foo
时,Python会对该文件进行求值,并将其定义的任何变量,函数和类放入模块对象中,并将其分配给名称foo
。
# foo.py
x = 1
def foo():
print 'foo'
>>> import foo
>>> type(foo)
<type 'module'>
>>> foo.x
1
>>> foo.foo()
foo
当您使用bar
文件创建目录__init__.py
时,您将创建一个python包。执行import bar
时,Python会评估__init__.py
文件,并将它定义的任何变量,函数和类放入模块对象中,并将其分配给名称bar
。
# bar/__init__.py
y = 2
def bar():
print 'bar'
>>> import bar
>>> type(bar)
<type 'module'>
>>> bar.y
2
>>> bar.bar()
bar
当你在python 包中创建python modules 时(也就是在包含.py
的目录中以__init__.py
结尾的文件),你必须通过此包导入这些模块:
>>> # place foo.py in bar/
>>> import foo
Traceback (most recent call last):
...
ImportError: No module named foo
>>> import bar.foo
>>> bar.foo.x
1
>>> bar.foo.foo()
foo
现在,假设你的项目结构是:
main.py
DataFunctions/
__init__.py
CashAMDSale.py
def AMDSale(): ...
GetValidAMD.py
def ValidAMD(GetValidAMD): ...
您的main
脚本可以import DataFunctions.CashAMDSale
并使用DataFunctions.CashAMDSale.AMDSale()
和import DataFunctions.GetValidAMD
并使用DataFunctions.GetValidAMD.ValidAMD()
。
答案 1 :(得分:1)
__init__.py
是一个文件夹,这意味着它是一个包,并且必须包含一个import DataFunctions.GetValidAMD
文件,以便python识别它。
从包中导入*时,不会自动导入其所有模块。这在proper time zone names
中有记录因此,要使代码正常工作,您需要显式导入所需的模块:
__init__.py
或者您需要将以下内容添加到DataFunctions
的{{1}}:
__all__ = ["GetValidAMD"]
然后你可以从包中import *
来导入__all__
中的所有内容
答案 2 :(得分:0)
查看this。
同样的问题。您正在导入DataFunctions
这是一个模块。我在那里指出在该模块中有一个名为DataFunctions的类,需要用
from DataFunctions import DataFunctions
...
AMDInstance = DataFunctions.GetValidAMD()