2016-01-21 101 views
1

基本上,我想運行連接功能,但我不斷收到CMD錯誤消息'類StraussBot沒有屬性'connectSock',但我可以明顯地看到它的確如此。我試過在這裏搜索,我找不到解決這個問題的任何解決方案。所以,如果你能幫助我找到爲什麼沒有找到'connectSock'函數,將會非常感激。Python類無法找到屬性

代碼:

import socket 
    from config import HOST, PORT, CHANNEL 

# User Info 
USER = "straussbot" # The bots username 
PASS = "oauth:sj175lp884ji5c9las089sm9vvaklf" # The auth code 

class StraussBot: 
    def __init__(self): 
     self.Ssock = socket.socket() 

    def connectSock(self): 
     self.Ssock.connect((HOST, PORT)) 
     self.Ssock.send(str("Pass " + PASS + "\r\n").encode('UTF-8')) 
     self.Ssock.send(str("NICK " + USER + "\r\n").encode('UTF-8')) 
     self.Ssock.send(str("JOIN " + CHANNEL + "\r\n").encode('UTF-8')) 

if __name__ == "__main__": 
    print "Starting the bot..." 
    while True: 
     straussbot = StraussBot 
     try: 
      straussbot.connectSock() 
     except Exception as e: 
      print e 
+0

'straussbot = StraussBot()',你失蹤parens。 –

+0

在您的主要區塊中,您將'straussbot'設置爲_class_ StraussBot,而不是_instance_類。 – ajwood

回答

1

您對此處的錯誤感到困惑。因爲您沒有實例,所以您獲得的AttributeError

你只創建了類此的引用:

straussbot = StraussBot 

您需要呼叫類產生一個實例:

straussbot = StraussBot() 

您還混合製表符和空格:

tabs in source

注意第5行到第9行有的縮進,但其餘的都有點?這些是標籤,Python將它們看作是8個空格。所以你的connectSock方法縮進裏面__init__而不是StrausBot上的方法。

您必須堅持要麼只是標籤只是空間。 Python的styleguide強烈建議您只使用空格。

1

你忘了實例化StraussBot類的對象。

straussbot = StraussBot 

剛分配的名稱straussbot來引用類StraussBot。將該行更改爲

straussbot = StraussBot() 

實際上將創建您的類的實例。然後您可以按照預期的方式在該實例上調用connectSock方法。

+0

然而,這不是唯一的錯誤。 –

0

你已經混合了製表符和空格。你可能會認爲你的StraussBot類有一個connectSock方法,但你實際上把connectSock的定義嵌套在__init__方法中。

在編輯器中打開「顯示空白」以查看問題。可能會有一個「將製表符轉換爲空格」選項,您可以使用它自動進行自動填充。使用-tt選項運行Python將使Python在這種情況發生時通知您。

另外,您需要實際創建一個StraussBot的實例,而不是將straussbot設置爲該類本身:straussbot = StraussBot()