2011-11-23 63 views
1

我正在嘗試訪問另一個腳本的類的python函數。這給了我下面的錯誤:嘗試訪問python函數時出現AttributeError

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的: '模塊' 對象有沒有屬性 'PROCESSINFORMATION' 所以,我必須讓這個第二隻編寫一個模塊?

+0

你能發佈您的代碼嗎? –

+0

也許是引發錯誤的代碼片段?以及您對模塊的導入語句,因爲您可能在導入步驟中有錯誤。 –

+0

你能否在這裏添加更多信息?像列表導入,文件樹等? –

回答

2

大概你試圖從模塊而不是從類調用函數。我建議你做一些事情,如:

from my_module import my_class 

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

編輯:我認爲Python不會讓你用「 - 」在一個函數名。

+0

你的意思是my_class.my_function() –

+0

@JanVorcak已編輯,謝謝 – juliomalegria

+0

謝謝,但作爲一個類使用,這是不可能的。我試過了,但是,但是這種方法失敗,沒有一個模塊 –

4

類中的函數稱爲方法。您可以從另一個模塊

import module 
module.Classname.method 

但是訪問它,除非該方法是一種特殊的方法調用靜態方法或類方法, 你將無法與module.Classname.method()調用它。

相反,你需要使類的一個實例:

inst=module.Classname(...) 

,然後調用從類實例的方法:

inst.method() 

的原因,你正在接受錯誤

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

是因爲module在其名稱空間中沒有名爲function_name的變量。但它確實有一個名爲Classname的變量。 同時,Classname在其名稱空間中有一個名爲function_name的變量。 所以要訪問該方法,您需要通過執行兩個屬性查找「module.Classname.function_name」「深入」到function_name

+1

謝謝,我想在這裏創建一個靜態方法,並使用工廠模式訪問它。 –

+0

您可能有興趣閱讀http://dirtsimple.org/2004/12/python-is-not-java.html –

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'] 
相關問題