尝试访问python函数时的AttributeError

时间:2011-11-23 13:59:50

标签: python python-module

我试图将一个类的python函数访问到另一个脚本中。这给了我以下错误:

AttributeError: 'module' object has no attribute 'functionName'

该函数存在于类中,可通过classname.functionName()调用访问。 有什么我想念的吗?

-update -

我的代码是:

(program.py)
import ImageUtils
import ...
class MyFrame(wx.Frame):
...
    ImageUtils.ProcessInformation(event)


(ImageUtils.py)
import statements... 
class ImageUtils(threading.Thread):
    def ProcessInformation(self, event):
        self.queue.put(event)

因此,错误是:AttributeError:'module'对象没有属性'ProcessInformation' 那么,我是否必须将第二个脚本作为模块?

3 个答案:

答案 0 :(得分:5)

类中的函数称为方法。您可以使用

从其他模块访问它
import module
module.Classname.method

但是,除非该方法是一种特殊的方法,否则调用static方法或classmethod, 您将无法使用module.Classname.method()调用它。

相反,你需要创建一个类的实例:

inst=module.Classname(...)

然后从类实例中调用该方法:

inst.method()

您收到错误的原因

AttributeError: 'module' object has no attribute 'function_name'

是因为module在其名称空间中没有名为function_name的变量。它确实有一个名为Classname的变量。 同时,Classname在其名称空间中有一个名为function_name的变量。 因此,要访问该方法,您需要通过执行两个属性查找来“挖掘”到function_namemodule.Classname.function_name

答案 1 :(得分:2)

可能你试图从模块而不是从类中调用函数。我建议你做一些事情:

from my_module import my_class

my_class.my_function(...)
# bla bla bla

编辑:我认为Python不允许您在函数名称中使用“ - ”。

答案 2 :(得分:0)

您可能想尝试使用dir()函数来查看该函数是否实际存在。

使用math模块的示例:

>>> import math
>>> dir(math)
['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log', 'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh']