Python模块问题

时间:2015-06-26 16:39:51

标签: python module

我是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'

我已经查找并寻找答案,但没有任何效果。有任何想法吗?谢谢!

3 个答案:

答案 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()