Python如何解释类​​定义中的参数?

时间:2016-07-29 08:11:53

标签: python beautifulsoup

我想了解Beautifulsoup的源代码。

其源代码的前几行是:

class Beautifulsoup(Tag):
    def __init__(self, markup="", features=None, builder=None,
    parse_only=None, from_encoding=None, exclude_encodings=None,
    **kwargs):
        ...

第一行只有一个名为“Tag”的参数,但 init 函数中有更多参数。另一方面,我知道我们通常会以某种方式使用beautifulsoup:

from bs4 import Beautifulsoup
bsobj = Beautifulsoup(text, parser)
  1. 类定义中的“Tag”参数是什么?
  2. 更新: 正如在@BusyAnt @Vatine的回答中所说,Tag不是一个论据,而是Beautifulsoup的超级类。我在另一个文件中找到了Tag的类定义:

    class Tag(PageElement):
    
    """Represents a found HTML tag with its attributes and contents."""
    
    def __init__(self, parser=None, builder=None, name=None, namespace=None,
                 prefix=None, attrs=None, parent=None, previous=None):
        "Basic constructor."
    

    最后,PageElement也是在同一个文件中定义的类:

    class PageElement(object):
    """Contains the navigational information for some part of the page
    (either a tag or a piece of text)"""
    

    的whooo!

    1. init 中的哪个参数对应于实际使用中的文本和解析器?

2 个答案:

答案 0 :(得分:1)

  1. TagBeautifoulSoup继承的类。这不是一个论点。请take a look at this了解详情。

  2. 至于__init__中的参数: self 是指将要创建的类的实例。其他参数使用默认值写入,这意味着如果在调用方法时未指定,则它们将采用此值。正如您在示例中指定了两个没有名称的参数一样,将使用位置顺序,即markers=textfeatures=parserHere是开始学习它的好方法。

  3. 我不愿意听起来很苛刻,但是当你不熟悉类,对象和类的概念时,可能不是开始在这个源代码中游荡的最佳选择Python中的其他一些基本内容。

答案 1 :(得分:1)

class BeautifulSoup(Tag):表示"请开始定义名为BeautifulSoup的类,继承自Tag"类。

def __init__(self, markup="", features=None...表示"让类的构造函数接受参数...",第一个是实例,构造函数方法被调用on(没有必要调用此self,但强烈推荐)。其余参数的工作方式类似于普通函数。

在您显示的特定调用中,markup将获得text的值featuresparser ''的值{你不使用任何关键字,因此它们是位置的,大多数都具有默认值。)