Возможно ли создать суб-методы в Python? - PullRequest
0 голосов
/ 30 ноября 2018

Я хочу написать метод для анализа сайта с библиотекой запросов, метод должен принимать часть URL, содержащую base_url, и выполнять запрос get по этому вопросу, основная проблема в том, что я не знаю, как это сделать.лучше;

Теперь я имею в виду:

import requests

class Response:

# ...

def site_parser(self, atom):

    base_url="https://example.com/"

    def category1(self):
        return requests.get(base_url + category1/ + atom).text

    def category2(self):
        return requests.get(base_url + category2/ + atom).text

if __name == "__main__":

def main():

    result = Response()
    result.site_parser.category1("atom")
    result.site_parser.category2("atom")

, поэтому необходимые данные имеют одинаковый базовый URL-адрес, но разные каталоги для входа, и мне нужно генерировать каждый каталог, если толькометод был вызван впоследствии.Есть ли способ сделать это правильно?Я хотел бы избежать создания глобальной переменной base url

1 Ответ

0 голосов
/ 30 ноября 2018

Мне кажется, что вам нужен другой класс.

class Response:

    # ... Some dark magic here ...

    def site_parser(self, atom):
        return ResponseParser(self, atom)

class ResponseParser:

    def __init__(self, res, atom):
        self.atom = atom
        self.res = res
        self.base_url = "https://example.com/"

    def category1(self):
        # ... Do stuff ...

    def category2(self):
        # ... Do stuff ...

Затем вы называете это с помощью

result = Response()
result.site_parser("atom").category1()

Если вы действительно настаиваете на том, чтобы избавиться от скобок наsite_parser вызов, вы можете переместить бит "atom" в categoryN методы и превратить site_parser в свойство , но IMO, вероятно, просто запутает людей больше всего на свете.

Как функциональный программист, я люблю вложенные функции и замыкания так же, как и следующий парень, но мне кажется, что, исходя из приведенного вами ограниченного примера, наличие второго вспомогательного класса, вероятно, будет более читабельнымспособ сделать это в этом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...