2016-07-27 3 views
-4

Я хотел вызвать функциональный паук, который находится внутри класса с такими параметрами, как url, word и maxPages.Вызов функции (метода) внутри класса

Когда я пытаюсь назвать его следующим образом, я получаю сообщение об ошибке, потому что spider() получает более 3 аргументов (вместо этого он получает 4 аргумента).

Пожалуйста, кто-нибудь может объяснить мне, как я могу правильно вызвать функцию, которая находится внутри класса.

Мой код выглядит следующим образом:

import HTMLParser 
    from urllib2 import urlopen 
    from pandas.io.parsers import TextParser 

    class LinkParser(HTMLParser.HTMLParser): 
    #other methods 

    def spider(url,word,maxPages): 
     pagesTovisit = [url] 
     numberVisited=0 
     foundWord = False 
     maxPages = 0 
     while numberVisited < maxPages and pagesTovisit != [] and not foundWord: 
      numberVisited = numberVisited +1 


      url = pagesTovisit[0] 
      pagesTovisit = pagesTovisit[1:] 
      try: 
       print numberVisited, "Visiting:", url 
       parser = LinkParser() 
       data, links = parser.getLinks(url) 
       if data.find(word)>-1: 
        foundWord = True 
        pagesTovisit = pagesTovisit +links 
        print "Success" 
      except: 
       print "failed" 
     if foundWord: 
      print "the word",word,"was found at",url 
     else: 
      print "word not found" 


    url = raw_input("enter the url: ") 
    word = raw_input("enter the word to search for: ") 
    maxPages = raw_input("the max pages you want to search in for are: ") 

    lp=LinkParser() 
    lp.spider(url,word,maxPages) 
+0

О, посмотри, я разобрал ваш вопрос и нашел ответ ... уже на StackOverflow. Хм. –

+0

Тогда почему вы это сказали и почему вы звоните, как будто это ?! –

ответ

3

Ваш отступы в посте все неправильно, но я предполагаю, что паук в классе. Вам нужно добавить self ключевое слово в качестве первого аргумента функции, чтобы сделать его метод:

class LinkParser(HTMLParser.HTMLParser): 
    def spider(self,url,word,maxPages): 
     ... 

Внутри вашего spider метода есть вызов LinkParser.getLinks(). Вместо создания другого экземпляра класса вы должны вызвать метод: self.getLinks(...), так как это не приведет к созданию новых экземпляров. Кроме класса методы и элементы могут быть достигнуты внутри методов, написав:

def methodOfClass(self,additionalArguments): 
    self.memberName 
    self.methodName(methodArguments) 
+0

Я знаю, что это может быть FGITW, но для получения полного ответа вы, вероятно, захотите объяснить, как его назвать. (Действительно, это дубликат, но вы уже ответили.) –

+0

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

+0

(я имел в виду внутри класса, позже придется писать 'self.spider' - возможно, вне сферы действия для вопроса, но это будет следующая встреча OP.) –

0

Игнорирование ошибок отступа, которые я считаю, являются вопросы только копипаст

Каждый метод в Python неявно recieves экземпляр это призванный в качестве первого аргумента, поэтому его определение должно рассчитывать на это.

Изменить def spider(url, word, maxPages)def spider(self, url, word, maxPages).

+0

Спасибо. Теперь он работает. – Coolfrog

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