2016-09-18 4 views
1

Это, по-видимому, обычная ошибка в Python, и я нашел много случаев, когда люди спрашивали об аналогичных, но потратили последнее (длительное время) на то, чтобы попробовать те решения, в которых они казались применимыми, и не повезло, поэтому прибегая к просьбе выяснить, что мне не хватает.AttributeError: экземпляр не имеет атрибута

Я получаю AttributeError: WebHandler экземпляр не имеет атрибута «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]|[[email protected]&+]|[!*\(\),]|(?:%[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() и называть их без себя, что так оно работает должным образом и не бросать какие-либо ошибки, которые сбивает с толку меня еще больше.

Не знаю, чего мне не хватает. Благодаря!

ответ

3

Ваша функция инициализации имеет три подчеркивания:

def ___init___(self): 

should have only two It:

def __init__(self): 

Как написано сейчас, это не вызывается при создании нового объекта.

+0

Спасибо! Это была проблема. –

+1

@KBirch Добро пожаловать. Поскольку вы, похоже, относительно новы к сайту, обратите внимание, что вы можете повысить все ответы, которые вы нашли полезными. Ответ TigerHawkT3, в частности, в основном идентичен этому. –

+0

спасибо, отмечены! И поддержал тебя и его. Все еще изучаю свой путь и ищу свободное время, когда я могу внести свой вклад. –

3

Это что у вас есть:

def ___init___(self): 

не то же самое, как это, что вызывается, когда объект конкретизируется:

def __init__(self): 

Разница заключается в том, что у вас есть три подчеркивает на любой стороне init, в то время как два требуются.

Смежные вопросы