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

2024-09-29 02:17:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力理解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”参数是什么?你知道吗

更新: 正如@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)"""

喔!你知道吗

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

Tags: textfromselfnoneparser参数定义源代码
2条回答

class BeautifulSoup(Tag):行的意思是“请开始定义一个名为BeautifulSoup的类,继承自class标记”。你知道吗

def __init__(self, markup="", features=None...行的意思是“让类的构造函数接受参数…”,第一行是调用构造函数方法的实例(不必调用这个self,但强烈建议这样做)。其余参数的工作方式与普通函数类似。你知道吗

在您展示的特定调用中,markup将获得textfeatures的值parser(您没有使用任何关键字,因此它们是位置性的,其中大多数都有默认值)。你知道吗

  1. TagBeautifoulSoup从中继承的类。这不是争论。请take a look at this了解更多信息。

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


我不想听起来很苛刻,但如果您不熟悉Python中的类、对象和其他一些基本内容的概念,那么开始在源代码中漫游可能不是一个好主意。你知道吗

相关问题 更多 >