Как ни крути, а 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')]
Но ведь в коде мы можем не знать тип переменной, с которой имеем дело.
Комментариев нет:
Отправить комментарий