导入不同类别的模块

时间:2019-04-01 15:13:51

标签: python python-3.x

我有一个名为jaguar的模块,该模块下具有不同的类。每个类内部都有许多功能。当我导入整个模块时,

import jaguar as jg

然后尝试调用一个名为read_excel的函数,它显示错误为

AttributeError: module 'jaguar' has no attribute named 'read_excel'

相反,如果我按类调用每个类并使用它,它将起作用。

有人可以帮我解决问题吗?

1 个答案:

答案 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上的教程会有所帮助。