Как ни крути, а var_dump() в php очень удобен и интуитивно понятен.
К сожалению, такой простой конструкции в python нет, но ее можно примерно повторить, если сделать следующее:
Разберем подробнее. Создадим файл vardump.py:
Запустим этот файл через консоль cmd.exe. Можно подумать, что функция выдаст нам два поля - model и метод getModel, но это не так. Мы получим еще кучу других данных об объекте:
Мы ведь не хотели с вами получать эти служебные поля? А python нам их вернул. Возможно есть другие способы сделать аналог var_dump объекта.
А давайте попробуем использовать эту функцию, чтобы получить структуру переменной, которая является словарем. Отредактируем файл vardump.py:
В итоге мы получим массу методов и служебных полей переменной d, но не увидим никаких значений:
Конечно, ясно, что эти значения можно получать при помощи метода d.items(), который вернет:
Но ведь в коде мы можем не знать тип переменной, с которой имеем дело.
К сожалению, такой простой конструкции в python нет, но ее можно примерно повторить, если сделать следующее:
from inspect import getmembers from pprint import pprint pprint(getmembers(yourObject))
Разберем подробнее. Создадим файл vardump.py:
# -*- coding:utf-8 -*-
from inspect import getmembers
from pprint import pprint
class Car(object):
model = "BMW"
def getModel(self):
return self.model
myCar = Car()
# Пусть мы хотим узнать поля объекта myCar
pprint(getmembers(myCar))
Запустим этот файл через консоль cmd.exe. Можно подумать, что функция выдаст нам два поля - model и метод getModel, но это не так. Мы получим еще кучу других данных об объекте:
[('__class__', ),
('__delattr__', ),
('__dict__', {}),
('__doc__', None),
('__format__', ),
('__getattribute__',
),
('__hash__', ),
('__init__', ),
('__module__', '__main__'),
('__new__', ),
('__reduce__', ),
('__reduce_ex__',
),
('__repr__', ),
('__setattr__', ),
('__sizeof__', ),
('__str__', ),
('__subclasshook__',
),
('__weakref__', None),
('getModel',
>),
('model', 'BMW')]
Мы ведь не хотели с вами получать эти служебные поля? А python нам их вернул. Возможно есть другие способы сделать аналог var_dump объекта.
А давайте попробуем использовать эту функцию, чтобы получить структуру переменной, которая является словарем. Отредактируем файл vardump.py:
d = {"name": "Johny", "age": 27}
# Пусть мы хотим узнать структуру словаря d
pprint(getmembers(d))
В итоге мы получим массу методов и служебных полей переменной d, но не увидим никаких значений:
[('__class__', ),
('__cmp__', ),
('__contains__', ),
('__delattr__', ),
('__delitem__', ),
('__doc__',
"dict() -> new empty dictionary
dict(mapping) -> new dictionary initialized from a mapping object's
(key, value) pairs
dict(iterable) -> new dictionary initialized as if via:
d = {}
for k, v in iterable:
d[k] = v
dict(**kwargs) -> new dictionary initialized with the name=value pairs
in the keyword argument list. For example: dict(one=1, two=2)"),
('__eq__', ),
('__format__', ),
('__ge__', ),
('__getattribute__',
),
('__getitem__', ),
('__gt__', ),
('__hash__', None),
('__init__', ),
('__iter__', ),
('__le__', ),
('__len__', ),
('__lt__', ),
('__ne__', ),
('__new__', ),
('__reduce__', ),
('__reduce_ex__',
),
('__repr__', ),
('__setattr__', ),
('__setitem__', ),
('__sizeof__', ),
('__str__', ),
('__subclasshook__',
),
('clear', ),
('copy', ),
('fromkeys', ),
('get', ),
('has_key', ),
('items', ),
('iteritems', ),
('iterkeys', ),
('itervalues', ),
('keys', ),
('pop', ),
('popitem', ),
('setdefault', ),
('update', ),
('values', ),
('viewitems', ),
('viewkeys', ),
('viewvalues', )]
Конечно, ясно, что эти значения можно получать при помощи метода d.items(), который вернет:
[('age', 27), ('name', 'Johny')]
Но ведь в коде мы можем не знать тип переменной, с которой имеем дело.
Комментариев нет:
Отправить комментарий