尝试访问Python函数时的AttributeError

3 投票
3 回答
8512 浏览
提问于 2025-04-17 06:55

我想在另一个脚本中访问一个类里的Python函数,但遇到了以下错误:

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

这个函数是在一个类里面的,我是通过classname.functionName()的方式来调用的。请问我是不是漏掉了什么?

-更新-

我的代码是:

(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' object has no attribute 'ProcessInformation'。那我是不是需要把这个第二个脚本变成一个模块呢?

3 个回答

1

你可以试试 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']
2

可能你是想从模块里调用这个函数,而不是从类里调用。我建议你可以这样做:

from my_module import my_class

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

补充:我觉得在Python中,函数名里是不能用“-”这个符号的。

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

类里面的一个函数叫做方法。你可以通过下面的方式从另一个模块访问它:

import module
module.Classname.method

不过,除非这个方法是特殊类型的方法,比如叫做静态方法(staticmethod)或者类方法(classmethod),否则你不能用 module.Classname.method() 这种方式来调用它。

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

inst=module.Classname(...)

然后再通过这个类的实例来调用方法:

inst.method()

你收到错误的原因是因为 module 里面没有叫 function_name 的变量。虽然它有一个叫 Classname 的变量。与此同时,Classname 里面有一个叫 function_name 的变量。

所以,要访问这个方法,你需要通过两次属性查找来“挖掘”到 function_name:也就是 module.Classname.function_name

撰写回答