Python类无法找到属性

时间:2016-01-21 18:28:21

标签: python class function

基本上,我想运行connect函数但是我一直收到CMD错误消息'类StraussBot没有属性' connectSock'但我显然可以看到它。我试过在这里搜索,我找不到任何解决这个问题的方法。因此,如果您能帮助我找到为什么找不到“连接锁定”,我们将不胜感激。功能

代码:

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

3 个答案:

答案 0 :(得分:1)

您忘记实例化班级StraussBot的对象。

straussbot = StraussBot

只需指定名称straussbot即可引用课程StraussBot。将该行更改为

straussbot = StraussBot()

实际创建一个类的实例。然后,您可以按预期调用该实例上的connectSock方法。

答案 1 :(得分:1)

你对这里的错误感到困惑。由于您没有实例,因此AttributeError获得self.Ssock

您只在此处创建了对该类的引用:

straussbot = StraussBot

您需要调用类来生成实例:

straussbot = StraussBot()

您还混合了标签和空格:

tabs in source

注意第5行到第9行如何在缩进中有,但其余部分有点?这些是标签,Python将其视为 8个空格。因此,connectSock方法在__init__的内缩进,而不是StrausBot上的方法。

您必须坚持只是标签只是空格。 Python的样式指南强烈建议您仅使用空格。

答案 2 :(得分:0)

您混合了标签和空格。您可能认为StraussBot类有connectSock方法,但实际上您将connectSock的定义嵌套在__init__方法中。

在编辑器中启用“显示空白”以查看问题。可能有一个“转换标签到空格”选项,您可以使用它来自动修复它。使用-tt选项运行Python将使Python在发生类似情况时通知您。

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