Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 27, 2011 20:46:48

Super_BOT
От:
Зарегистрирован: 2011-01-23
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Супер dir

Здраствуйте, мне необходимо провести супер дебагинг сложного класса ( ищу ошибку, которая проскакивает через раз)

В связи с этим встал вопрос, каким образом можно вывести все поля класса, с учетом возможных вложенностей других классов и так далее.

То есть нечто вроде функции dir, только выводить нужно названия элементов, и их содержимое, плюс то же самое для всех вложенных сложных элементов.

Как это можно сделать?



Офлайн

#2 Апрель 27, 2011 21:05:37

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Супер dir

посмотрите в качестве примера otsObjectBrowser
http://www.opentradingsystem.com/TradingPlatform/OTS_Python_Object_Browser_.html



Отредактировано (Апрель 27, 2011 21:06:07)

Офлайн

#3 Апрель 27, 2011 22:34:00

Super_BOT
От:
Зарегистрирован: 2011-01-23
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Супер dir

спасибо, и еще вопрос, правда может немного не по теме

Как можно узнать в pycurl'е, перед отправкой запроса, какие параметры установлены во всех возможных setopt?



Офлайн

#4 Апрель 27, 2011 22:39:12

Super_BOT
От:
Зарегистрирован: 2011-01-23
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Супер dir

И еще вопрос, через dir я могу получить список всех имен переменных, а как узнать их значения?



Офлайн

#5 Апрель 28, 2011 07:24:56

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Супер dir

“а как узнать их значения”

class Tx:
def __init__(self)
self.val_name=2
parent=Tx()
getattr(parent,"val_name")
# или
getattribute(parent,"val_name")
К сожалению для для других контейнеров несколько иначе: parent



Отредактировано (Апрель 28, 2011 07:27:57)

Офлайн

#6 Апрель 28, 2011 07:38:32

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Супер dir

Что-то вы с *getattribute* напутали… Нет такой буквы!



Офлайн

#7 Апрель 28, 2011 07:52:26

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Супер dir

ок согласен, видел звон но ни ни разу не пользовался :)
“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”)?



Офлайн

#8 Апрель 28, 2011 10:10:11

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Супер dir

Ммм.
На пальцах:
__getattr__ вызывается, если атрибута нет в __dict__ экземпляра (не класса).
__getattribute__ вызывается всегда. Так работают свойства и методы. Перекрытие стандартного поведения позволит делать маленькие чудеса. Ни разу не пришлось применять, если честно, насколько я помню. Но примеры — видел. Если не получилось — вызывается __getattr__.
getattr (без подчерков) вызывает __getattribute__ со всей машинерией, за исключением того что getattr можно передать значение по умолчанию, если машинерия ничего не найдет.
Надеюсь, понятно изложил.



Офлайн

#9 Апрель 28, 2011 17:23:41

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Супер dir

Ок спасибо это будет очень полезно



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version