Форум сайта python.su
0
Здраствуйте, мне необходимо провести супер дебагинг сложного класса ( ищу ошибку, которая проскакивает через раз)
В связи с этим встал вопрос, каким образом можно вывести все поля класса, с учетом возможных вложенностей других классов и так далее.
То есть нечто вроде функции dir, только выводить нужно названия элементов, и их содержимое, плюс то же самое для всех вложенных сложных элементов.
Как это можно сделать?
Офлайн
253
посмотрите в качестве примера otsObjectBrowser
http://www.opentradingsystem.com/TradingPlatform/OTS_Python_Object_Browser_.html
Отредактировано (Апрель 27, 2011 21:06:07)
Офлайн
0
спасибо, и еще вопрос, правда может немного не по теме
Как можно узнать в pycurl'е, перед отправкой запроса, какие параметры установлены во всех возможных setopt?
Офлайн
0
И еще вопрос, через dir я могу получить список всех имен переменных, а как узнать их значения?
Офлайн
253
“а как узнать их значения”
class Tx:
def __init__(self)
self.val_name=2
parent=Tx()
getattr(parent,"val_name")
# или
getattribute(parent,"val_name")
Отредактировано (Апрель 28, 2011 07:27:57)
Офлайн
14
Что-то вы с *getattribute* напутали… Нет такой буквы!
Офлайн
253
ок согласен, видел звон но ни ни разу не пользовался :)
“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”)?
Офлайн
14
Ммм.
На пальцах:
__getattr__ вызывается, если атрибута нет в __dict__ экземпляра (не класса).
__getattribute__ вызывается всегда. Так работают свойства и методы. Перекрытие стандартного поведения позволит делать маленькие чудеса. Ни разу не пришлось применять, если честно, насколько я помню. Но примеры — видел. Если не получилось — вызывается __getattr__.
getattr (без подчерков) вызывает __getattribute__ со всей машинерией, за исключением того что getattr можно передать значение по умолчанию, если машинерия ничего не найдет.
Надеюсь, понятно изложил.
Офлайн
253
Ок спасибо это будет очень полезно
Офлайн