Super_BOT
Апрель 27, 2011 20:46:48
Здраствуйте, мне необходимо провести супер дебагинг сложного класса ( ищу ошибку, которая проскакивает через раз)
В связи с этим встал вопрос, каким образом можно вывести все поля класса, с учетом возможных вложенностей других классов и так далее.
То есть нечто вроде функции dir, только выводить нужно названия элементов, и их содержимое, плюс то же самое для всех вложенных сложных элементов.
Как это можно сделать?
doza_and
Апрель 27, 2011 21:05:37
Super_BOT
Апрель 27, 2011 22:34:00
спасибо, и еще вопрос, правда может немного не по теме
Как можно узнать в pycurl'е, перед отправкой запроса, какие параметры установлены во всех возможных setopt?
Super_BOT
Апрель 27, 2011 22:39:12
И еще вопрос, через dir я могу получить список всех имен переменных, а как узнать их значения?
doza_and
Апрель 28, 2011 07:24:56
“а как узнать их значения”
class Tx:
def __init__(self)
self.val_name=2
parent=Tx()
getattr(parent,"val_name")
# или
getattribute(parent,"val_name")
К сожалению для для других контейнеров несколько иначе: parent
Андрей Светлов
Апрель 28, 2011 07:38:32
Что-то вы с *getattribute* напутали… Нет такой буквы!
doza_and
Апрель 28, 2011 07:52:26
ок согласен, видел звон но ни ни разу не пользовался :)
“See the __getattribute__() method below for a way to actually get total control in new-style classes”
http://docs.python.org/reference/datamodel.htmlнаверное obj.__getattribute__(“asdas”)?
Андрей Светлов
Апрель 28, 2011 10:10:11
Ммм.
На пальцах:
__getattr__ вызывается, если атрибута нет в __dict__ экземпляра (не класса).
__getattribute__ вызывается всегда. Так работают свойства и методы. Перекрытие стандартного поведения позволит делать маленькие чудеса. Ни разу не пришлось применять, если честно, насколько я помню. Но примеры — видел. Если не получилось — вызывается __getattr__.
getattr (без подчерков) вызывает __getattribute__ со всей машинерией, за исключением того что getattr можно передать значение по умолчанию, если машинерия ничего не найдет.
Надеюсь, понятно изложил.
doza_and
Апрель 28, 2011 17:23:41
Ок спасибо это будет очень полезно