我有一个名为jaguar的模块,该模块下具有不同的类。每个类内部都有许多功能。当我导入整个模块时,
import jaguar as jg
然后尝试调用一个名为read_excel的函数,它显示错误为
AttributeError: module 'jaguar' has no attribute named 'read_excel'
相反,如果我按类调用每个类并使用它,它将起作用。
有人可以帮我解决问题吗?
答案 0 :(得分:1)
没有看到您的代码,很难100%确定正在发生什么。将来,如果包含Minimal, Complete, and Verifiable example,您可能会获得更多更好的问题答案。
似乎最好避免在调用时如何查找Python的函数和方法的细节(这是双重的,因为我不是该领域的专家。)也就是说,似乎问题在于您正在尝试调用a就像在模块级别定义的那样起作用。但是,所讨论的函数实际上是在类(在该模块内部)中定义的方法。看来您有一个jaguar.py文件,其结构类似于:
""" jaguar module does jaguar-y stuff """
class TheClass:
def __init__(self):
# Do object initialization stuff
def read_excel(self):
print('In read_excel()')
在程序文件中,您正在尝试执行以下操作:
""" main program """
import jaguar as jg
jg.read_excel()
这将导致AttributeError,因为在模块级别找不到该函数。相反,您需要实例化一个对象,然后调用该方法:
""" main program """
import jaguar as jg
my_ob = jg.TheClass()
my_ob.read_excel()
或者,您可以在模块级别(即,在类外部)定义函数,前提是该函数对您要尝试执行的操作有效。因此jaguar.py的结构如下:
""" jaguar module does jaguar-y stuff """
def read_excel():
print('In read_excel()')
class TheClass:
def __init__(self):
# Do object initialization stuff
后面的示例将允许您通过jg.read_excel()
调用read_excel(),就像上面的第一个主程序示例一样。
您可能会发现遍历Python Modules上的教程会有所帮助。