2016-07-27 8 views
-4

クラス内にある関数spiderを、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): 
     ... 

LinkParser.getLinks()への呼び出しがあり、あなたのspiderメソッド内。クラスの別のインスタンスを作成する代わりに、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

関連する問題