【问题标题】:Python class can't find attributePython类找不到属性
【发布时间】:2016-01-21 18:28:21
【问题描述】:

基本上,我想运行连接函数,但我不断收到 CMD 错误消息“class StraussBot 没有属性”connectSock,但我显然可以看到它确实如此。我试过在这里搜索,但找不到任何解决此问题的方法。因此,如果您能帮我找出为什么找不到“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

【问题讨论】:

  • straussbot = StraussBot(),你缺少括号。
  • 在您的主块中,您将straussbot 设置为 StraussBot,而不是该类的实例

标签: python class function


【解决方案1】:

您对这里的错误感到困惑。因为您没有实例,所以您获得了 self.SsockAttributeError

您在这里只创建了对该类的引用:

straussbot = StraussBot

你需要调用类来产生一个实例:

straussbot = StraussBot()

您还混合了制表符和空格:

注意第 5 行到第 9 行如何在缩进中有 ,但其余的有点?这些是制表符,Python 将它们视为 8 个空格。因此,您的 connectSock 方法缩进 inside__init__ 并且不被视为 StrausBot 上的方法。

您必须坚持使用仅制表符仅使用空格。 Python 的样式指南强烈建议您只使用空格。

【讨论】:

    【解决方案2】:

    您忘记实例化您的类 StraussBot 的对象。

    straussbot = StraussBot
    

    只需指定名称straussbot 来引用类StraussBot。将该行更改为

    straussbot = StraussBot()
    

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-11
        • 1970-01-01
        • 2021-06-16
        • 1970-01-01
        • 2022-10-16
        • 2017-12-16
        • 2018-09-24
        相关资源
        最近更新 更多