我试图将一个类的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' 那么,我是否必须将第二个脚本作为模块?
答案 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_name
:module.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']