在类中调用函数(方法)

时间:2016-07-27 14:32:49

标签: python

我想调用类中的函数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)

2 个答案:

答案 0 :(得分:3)

你在帖子中的缩进是错的,但我认为蜘蛛是在课堂上。您需要将class LinkParser(HTMLParser.HTMLParser): def spider(self,url,word,maxPages): ... 关键字作为第一个参数添加到函数中,以使其成为方法:

spider

LinkParser.getLinks()方法中,有一个self.getLinks(...)的来电。您应该通过以下方式调用方法:def methodOfClass(self,additionalArguments): self.memberName self.methodName(methodArguments) ,而不是创建该类的另一个实例,因为这不会创建新实例。 还可以通过编写方法在方法内部访问类方法和成员:

 // FONT LOADER
 {
    test   : /\.svg/,
    exclude: [/images/],
    loader : 'file?prefix=font/'
 },
 // OTHER FILES LOADER
 {
    test: /\.(mp4|ogg|svg)$/,
    loader: 'file-loader'
 }

答案 1 :(得分:0)

忽略我认为只有复制粘贴问题的缩进错误

Python中的每个方法都隐式地接收它作为第一个参数调用的实例,因此它的定义应该计算在内。

def spider(url, word, maxPages)更改为def spider(self, url, word, maxPages)