2015-03-19 144 views
-1

我希望能夠創建一個類的實例,並調用此實例上的方法,它將我連接到服務(SQS,如果有的話)。然後,我希望能夠調用可以讓我與該服務交互的方法。NameError:未定義名稱'queue_id'

出於某種原因,我不斷收到關於進口此錯誤:

class AmazonQueue(queue_id): 
NameError: name 'queue_id' is not defined 

但據我所知,這甚至沒有得到在進口調用,所以我不應該得到這個錯誤。

裏面AmazonQueue是這樣的方法:

def __new__(self, queue_id): 
     conn = am_auth.BasicAuth() 
     q = conn.create_queue(queue_id) 
     return q 

剛剛返回一個代表身份驗證服務,我覺得理論上應該是提供給其他的方法來運行的對象。

在我的劇本,我想這可以這樣運行:

q = am_queue.AmazonQueue(queue_id='queue_id_goes_here') 

再有像這樣)稱爲內部AmazonQueue(方法:

q.post_message('blahblahblah') 

那麼,爲什麼我收到此錯誤如果我甚至沒有實例化導入的類?

+0

在導入時調用類*定義*,因爲定義類是可執行語句。 – 2015-03-19 13:26:22

回答

0

在你的類定義的PARAMATERS到AmazonQueue是父類,而不是參數,你想需要實例化

一種選擇是隻創建一個功能,因爲您的實例的使用是非常簡單

def get_queue(queue_id): 
    conn = am_auth.BasicAuth() 
    q = conn.create_queue(queue_id) 
    return q 

有一點要考慮的是:

In general, you shouldn't need to override new unless you're subclassing an immutable type like str, int, unicode or tuple.

Python's use of __new__ and __init__?答案上堆棧溢出

+0

所以基本上,這完全是由於我不熟悉Python中的OOP。 – 2015-03-19 13:17:15

+0

:)它可能是! – dm03514 2015-03-19 13:17:47