Наследовать и добавлять методы или создавать новый объект и принимать данные в качестве аргумента? - PullRequest
0 голосов
/ 23 июня 2019

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

Моя программа - это веб-скребок, который очищает веб-сайт с различными типами страниц (и разными объектами данных на этих страницах). Я использую BeautifulSoup (bs4) для анализа данных из необработанного ответа на запрос. Поскольку требуется много различных объектов данных, мне нужно около 10 различных функций синтаксического анализа.

Мой вопрос - какая архитектура лучше всего подойдет для объекта-парсера?

A: Создайте класс mySoup, унаследованный от BeautifulSoup, и добавьте функции синтаксического анализа как методы.

B: самостоятельно создать класс Parser, который принимает в качестве аргумента объект BeautifulSoup.

Я уже двинулся вперёд между этими двумя решениями, и мое личное мнение состоит в том, что я бы предпочел выбрать Inheritance-Solution просто потому, что он делает вызов синтаксического анализатора чистым и простым. Также «Parser» не выглядит для меня как необходимый объект, а скорее как набор функций.

class mySoup(BeautifulSoup):
    def parseData1(self):
        data = self.find('foo', {'class':'bar'}).text
        return data

    def parseData2(self):
        ...
        return data

soup = mySoup(page_source)
data = soup.parseData1()

против

class Parser():
    def __init__(self,soup):
        self.soup=soup

    def parseData1(self):
        data = self.soup.find('foo', {'class':'bar'}).text
        return data

    def parseData2(self):
        ...
        return data

soup = BeautifulSoup(page_source)
data = Parser(soup).parseData1()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...