Python类无法找到属性

问题描述:

基本上,我想运行连接功能,但我不断收到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

您对此处的错误感到困惑。因为您没有实例,所以您获得的AttributeError

你只创建了类此的引用:

straussbot = StraussBot 

您需要呼叫类产生一个实例:

straussbot = StraussBot() 

您还混合制表符和空格:

tabs in source

注意第5行到第9行有的缩进,但其余的都有点?这些是标签,Python将它们看作是8个空格。所以你的connectSock方法缩进里面__init__而不是StrausBot上的方法。

您必须坚持要么只是标签只是空间。 Python的styleguide强烈建议您只使用空格。

你忘了实例化StraussBot类的对象。

straussbot = StraussBot 

刚分配的名称straussbot来引用类StraussBot。将该行更改为

straussbot = StraussBot() 

实际上将创建您的类的实例。然后您可以按照预期的方式在该实例上调用connectSock方法。

+0

然而,这不是唯一的错误。 –

你已经混合了制表符和空格。你可能会认为你的StraussBot类有一个connectSock方法,但你实际上把connectSock的定义嵌套在__init__方法中。

在编辑器中打开“显示空白”以查看问题。可能会有一个“将制表符转换为空格”选项,您可以使用它自动进行自动填充。使用-tt选项运行Python将使Python在这种情况发生时通知您。

另外,您需要实际创建一个StraussBot的实例,而不是将straussbot设置为该类本身:straussbot = StraussBot()