Что это за непонятная строчка в grab при работе с DOM-деревом?

>>> g.go('http://yandex.ru')
<grab.response.Response object at 0x11bea90>
>>> type(g.response.body)
<type 'str'>
>>> type(g.response.unicode_body())
<type 'unicode'>

<grab.response.Response object at 0x11bea90> Что это значит?
  • Вопрос задан
  • 2630 просмотров
Решения вопроса 1
sheknitrtch
@sheknitrtch
Когда вы выполняете код
g.go('http://yandex.ru')
происходит следующее: функция "go" возвращает объект экземпляр класса Response из модуля grab.response. При этом интерпретатор пытается вывести этот объект на экран. Стандартный способ вывода объекта - это преобразовать его в строку:
<полное.имя.Класса object at адрес_объекта_в_памяти>

За преобразование объекта в строку отвечают два метода: __repr__ и __str__.

Ваш код можно переписать следующим образом:
>>> resp = g.go('http://yandex.ru')
>>> print resp
<grab.response.Response object at 0x11bea90>
>>> print resp.__repr__() #не самый лучший способ
<grab.response.Response object at 0x11bea90>
>>> print repr(resp) #вот так получше
<grab.response.Response object at 0x11bea90>

команда "print" автоматически вызывает метод __repr__ для объекта resp.

Ещё пример:
>>> import re
>>> re.compile('aaa')
<_sre.SRE_Pattern object at 0x01295EE8>

Если вам не нравится, что на экран выводится имя класса и адрес объекта в памяти, то можете в классе Response переопределить метод "__repr__", чтобы он возвращал строку на ваш вкус.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
20 нояб. 2024, в 19:18
30000 руб./за проект
20 нояб. 2024, в 19:13
1000 руб./за проект
20 нояб. 2024, в 18:14
5000 руб./за проект