Доброго времени
Сабж. Первый подход к гуглу дал pprint. Он удобен для словарей, но абсолютно бесполезен для объектов
Perl:
use Data::Dumper;
use WWW::Mechanize;
my $browser = WWW::Mechanize->new();
printf "%s\n", Dumper($browser);
$VAR1 = bless( {
'headers' => {},
'ssl_opts' => {
'verify_hostname' => 1
},
'forms' => undef,
[...]
'cookie_jar' => bless( {
'COOKIES' => {}
}, 'HTTP::Cookies' ),
'proxy' => {},
'max_size' => undef
}, 'WWW::Mechanize' );
Python:
import pprint
import mechanize
browser = mechanize.Browser()
pprint.pprint(browser)
вывод:
<mechanize._mechanize.Browser instance at 0x15e7c20>
Допустим, я понимаю почему так происходит. В perl ООП сделан через одно место. self, в котором хранятся поля класса - по сути обычная структура данных. Как правило - хэш ( в терминах Python - словарь ). Плюс области видимости позволяют при необходимости залезть и вытащить что угодно. А в Python практически всё - объект. И у объекта определён метод __str__, который приводит его к строке. И если автор класса об этом не подумал, __str__ даст бесполезный текст «блаблабла instance at адрес»
Второй подход к гуглу дал vars(), dirs(), которые вполне годятся для нормального дампа:
pprint.pprint( vars( browser ) )
вывод:
{'_any_request': {},
'_any_response': {},
'_client_cert_manager': <mechanize._auth.HTTPSClientCertMgr instance at 0x1807758>,
'_factory': <mechanize._html.DefaultFactory instance at 0x17a2f38>,
'_handle_referer': True,
'_handler_index_valid': False,
[...]
'request': None,
'request_class': <class mechanize._request.Request at 0x165fef0>}
Именно то, что нужно, поля и их значения. Но в дампе опять видим издевательские «instance at». Если хочется идти глубже - нужно вручную их дампить через vars. Наверняка можно пройти по вложенным объектам, пусть даже рекурсивно, и сделать как perl.
Вопрос, есть ли в python готовый модуль, в котором это уже сделано, т.е. модуль, который является полноценной заменой перловому Data::Dumper ?