Найти - Пользователи
Полная версия: Как переопредилить метод get в requests.session
Начало » Центр помощи » Как переопредилить метод get в requests.session
1
agryn
Здравствуйте! Наконец добрался до ООП. В принципе теория понятна. Но от на практиеском примере чтото не получается. Нужно переопределить метод get в requests.session так что б после выполнения кода:
b = bot()
b.get('http://googe.com')
# Вывод html-кода
print b.text
Выводилса код страницы.
Клас bot пробую создать так:
import requests
class bot(requests.Session):
    def __init__(self, 
        headers=None, 
        cookies=None, 
        auth=None, 
        timeout=None, 
        proxies=None, 
        hooks=None, 
        params=None, 
        config=None, 
        prefetch=True, 
        verify=True, 
        cert=None):
        self.text = None
        requests.session.__init__(self, headers=headers, cookies=cookies, auth=auth, timeout=timeout, proxies=proxies, hooks=hooks, params=params, config=config, prefetch=prefetch, verify=verify, cert=cert)
    def get(self, url,
        headers=None, 
        cookies=None, 
        auth=None, 
        timeout=None, 
        proxies=None, 
        hooks=None, 
        params=None, 
        config=None, 
        prefetch=True, 
        verify=True, 
        cert=None):
        self.text = self.get(self,url, headers=None, 
        cookies=None, 
        auth=None, 
        timeout=None, 
        proxies=None, 
        hooks=None, 
        params=None, 
        config=None, 
        prefetch=True, 
        verify=True, 
        cert=None).text
Подскажите где ошибка, или дайте правильный пример.
odnochlen
       requests.session.__init__
Здесь должен стоять requests.Session.__init__, т.е. конструктор твоего родительского класса. И желательно первой строкой. Или наследоваться надо от requests.session, я потрохов requests не знаю.
reclosedev
Ответ в коде, но не понятно зачем в объекте Session (Bot) иметь text? Он же есть в Response.
# -*- coding: utf-8 -*-
import requests
 
class Bot(requests.Session): # Имена классов с Большой буквы
     # Используем *args **kwargs потому что вручную переписывать лень
     # и перечень параметров часто меняется т.к. библиотека еще не дошла до 1.0
    def __init__(self, *args, **kwargs):
        self.text = None  # надеюсь, это просто пример
        super(Bot, self).__init__(*args, **kwargs)
        # или request.Session.__init__(self, *args, **kwargs)
 
    def get(self, url, *args, **kwargs):
        # Нужно вызывать метод базового класса
        # также, get должен возвращать Response
        response = super(Bot, self).get(url, *args, **kwargs)
        self.text = response.text # делаем что хотим
        return response # возвращаем
 
s = Bot()
print s.get("http://ya.ru").ok
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB