AttributeError: instance has no attribute

AttributeError: instance has no attribute

这似乎是 Python 中的一个常见错误,我发现很多人都在询问类似的问题,但最后(很长一段时间)都在尝试那些似乎适用的解决方案,并且运气不好,所以求助于找出我所缺少的东西。

我收到 AttributeError: WebHandler 实例没有属性 'search_str'

这似乎是一个特定的方法,每当我从这个方法调用 ___init___ 中设置的任何 class 变量时,我都会收到这个错误。我已经将它作为一个简单的函数而不是 class 方法提取到一个测试文件中并且它工作正常,我已经尝试重新缩进几次以确保不是那样,所以我我对此一头雾水。

我正在使用 Python 2.7 和 TextWrangler,如果其中任何一个有用的话(TextWrangler 在 3 年里没有给我任何问题,但我认为应该包括任何东西)

import requests
import re

class WebHandler():

    def ___init___(self):
        self.urllist = []
        self.search_str = re.compile(r'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', re.I|re.M)

    def set_urls(self, test, data):
        for line in test[11:]:
            if (("even" in line) or ("odd" in line)):
                match = re.search(self.search_str, line)
            self.urllist.append(match.group(0))

我尝试过的另一件事是,如果我从 ___init___ 复制属性并简单地将它们设为 set_urls() 并在没有 self 的情况下调用它们,这样它就可以正常工作并且不会抛出任何错误,这让我更加困惑。

不知道我错过了什么。谢谢!

你拥有的这个:

def ___init___(self):

与实例化对象时调用的调用不同:

def __init__(self):

不同之处在于 三个 下划线位于 init 的两边,而两个下划线是必需的。

你的初始化函数有三个下划线:

def ___init___(self):

should have only two:

def __init__(self):

如现在所写,创建新对象时不会调用它。