2016-07-29 4 views
-5

Я пытаюсь понять исходный код Beautifulsoup.Как Python интерпретирует аргументы в определении класса?

Первые несколько строк исходного кода является:

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

Существует только один аргумент называется «Tag» на первой линии, но гораздо больше в инициализации функции. С другой стороны, я знаю, что мы обычно используем BeautifulSoup в как-то так:

from bs4 import Beautifulsoup 
bsobj = Beautifulsoup(text, parser) 
  1. Что такое, что «Tag» аргумент в определении класса?

Update: Как сказал в ответ @BusyAnt @Vatine «s, 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 соответствует фактическому использованию текста и парсера?
+0

Вы ссылаетесь на 'класс Beatifulsoup (тег)'? Или вы спрашиваете, как работают параметры функции в python? –

+0

это то же самое, что и аргументы нормальной функции, за исключением того, что первое self относится к самому классу – YOU

ответ

1
  1. Tag класс, который наследует от BeautifoulSoup. Это не аргумент. Пожалуйста, take a look at this, чтобы узнать больше.

  2. Что касается аргументов в __init__: self относится к экземпляру класса, который будет создан. Другие аргументы записываются со значениями по умолчанию, а это означает, что они будут принимать это значение, если не указано при вызове метода. И поскольку вы указали два аргумента без имен в вашем примере, будет использоваться позиционный порядок, то есть markers=text и features=parser. Here - это хороший способ узнать об этом.


Я не хочу показаться суровыми, но может не лучшая идея, чтобы начать блуждающих в этом исходном коде, пока вы не знакомы с понятиями классы, объекты и некоторые другие основные вещи в Python.

+1

Потребуется некоторое время, чтобы прочитать материалы, которые вы рекомендовали. спасибо! – Houken

+0

У вас хорошее настроение. Вы сможете найти множество простых примеров об этом и других вещах в Интернете или даже здесь, в [StackOverflow Dowumentation] (http://stackoverflow.com/documentation/python/topics) – BusyAnt

1

Линия class BeautifulSoup(Tag): означает «пожалуйста, начните определять класс с именем BeautifulSoup, наследующий от тега класса».

Линия (ы) def __init__(self, markup="", features=None... означает «пусть конструктор класса принимает аргументы ...», причем первым является экземпляр, на который вызывается метод конструктора (нет необходимости называть это self, но это сильно рекомендуется). Остальные аргументы работают как функция нормальной функции.

В конкретном вызове вы показал, markup получит значение text и features что из parser (вы не используете какие-либо ключевые слова, так что они будут позиционными, причем большинство из них имеет значение по умолчанию).

Смежные вопросы