Python模块问题

2024-05-15 22:29:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python还很陌生,学习python的时间不长。我有一个主文件

import Tests
from Tests import CashAMDSale

CashAMDSale.AMDSale()

和现金销售

import pyodbc
import DataFunctions
import automa
from DataFunctions import *
from automa.api import *

def AMDSale():
    AMDInstance = DataFunctions.GetValidAMD()

这是格瓦利达姆

import pyodbc

def ValidAMD(GetValidAMD):
     (short method talking to a database)

我的错误出现在AMDInstance = DataFunctions.GetValidAMD()行上

我得到错误AttributeError: 'module' object has no attribute 'GetValidAMD'

我一直在寻找答案,但什么都没有成功。有什么想法吗?谢谢!你知道吗


Tags: 文件fromimportdef错误时间testspyodbc
3条回答

DataFunctions是一个文件夹,这意味着它是一个包,必须包含一个__init__.py文件,python才能识别它。你知道吗

从包导入*时,不会自动导入它的所有模块。这在docs中有记录

因此,要使代码正常工作,您需要显式导入所需的模块:

import DataFunctions.GetValidAMD

或者您需要在DataFunctions__init__.py中添加以下内容:

__all__ = ["GetValidAMD"]

然后可以从包中import *导入__all__中侦听的所有内容

查看this。你知道吗

同样的问题。您正在导入DataFunctions,它是一个模块。我解释了在这个模块中有一个名为DataFunctions的类,它需要用

from DataFunctions import DataFunctions
...
AMDInstance = DataFunctions.GetValidAMD()

当您创建文件foo.py时,您将创建一个python模块。执行import foo操作时,Python对该文件求值,并将它定义的所有变量、函数和类放入一个module对象中,并将其指定给名称foo。你知道吗

# foo.py
x = 1
def foo():
    print 'foo'

你知道吗

>>> import foo
>>> type(foo)
<type 'module'>
>>> foo.x
1
>>> foo.foo()
foo

使用__init__.py文件创建目录bar时,将创建一个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模块时(即在包含__init__.py的目录中以.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()。你知道吗

相关问题 更多 >