我正在努力理解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)
更新: 正如@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)"""
喔!你知道吗
第
class BeautifulSoup(Tag):
行的意思是“请开始定义一个名为BeautifulSoup的类,继承自class标记”。你知道吗第
def __init__(self, markup="", features=None...
行的意思是“让类的构造函数接受参数…”,第一行是调用构造函数方法的实例(不必调用这个self
,但强烈建议这样做)。其余参数的工作方式与普通函数类似。你知道吗在您展示的特定调用中,
markup
将获得text
和features
的值parser
(您没有使用任何关键字,因此它们是位置性的,其中大多数都有默认值)。你知道吗Tag
是BeautifoulSoup
从中继承的类。这不是争论。请take a look at this了解更多信息。至于
__init__
中的参数:self
引用将要创建的类的实例。其他参数是用默认值编写的,这意味着如果在调用方法时未指定,则它们将采用此值。由于您在示例中指定了两个没有名称的参数,因此将使用位置顺序,即markers=text
和features=parser
。Here将是开始了解它的一个好方法。我不想听起来很苛刻,但如果您不熟悉Python中的类、对象和其他一些基本内容的概念,那么开始在源代码中漫游可能不是一个好主意。你知道吗
相关问题 更多 >
编程相关推荐