【问题标题】:AttributeError: instance has no attributeAttributeError:实例没有属性
【发布时间】:2016-09-18 07:31:11
【问题描述】:

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

我收到 AttributeError: WebHandler instance has no attribute 'search_str'

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

如果其中任何一个有帮助,我正在使用 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 的情况下调用它们这样它就可以正常工作并且不会抛出任何错误,这让我更加困惑。

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

【问题讨论】:

    标签: python python-2.7 oop attributeerror


    【解决方案1】:

    你的 init 函数有三个下划线:

    def ___init___(self):
    

    should have only two:

    def __init__(self):
    

    正如现在写的那样,当你创建一个新对象时它不会被调用。

    【讨论】:

    • 谢谢!这就是问题所在。
    • @KBirch 不客气。由于您对该网站似乎相对较新,因此请注意,您可以对所有您认为有帮助的答案进行投票。尤其是 TigerHawkT3 的回答,基本上和这个回答是一样的。
    • 谢谢,注意!并赞成你和他的。仍在学习我的方式并寻找空闲时间,我也可以贡献一些。
    【解决方案2】:

    你拥有的这个:

    def ___init___(self):
    

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

    def __init__(self):
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-19
      • 1970-01-01
      • 2015-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多