尝试访问Python函数时的AttributeError
我想在另一个脚本中访问一个类里的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
。