Я начинаю программировать в различных проектах с использованием Python (включая веб-разработку Django и разработку игр Panda3D).
Чтобы помочь мне понять, что происходит, я бы хотел «заглянуть» внутрь объектов Python, чтобы увидеть, как они помечаются - как их методы и свойства.
Скажем, у меня есть объект Python, что мне нужно, чтобы распечатать его содержимое? Это вообще возможно?
python
introspection
littlejim84
источник
источник
object.__dict__
источник
vars(object)
сделано для этого.from pprint import pprint; pprint(vars(object))
дал мне действительно хороший вид на содержание моего объекта. Спасибо @liberforceСначала прочитайте источник.
Во-вторых, используйте
dir()
функцию.источник
Я удивлен, что никто не упомянул помощь еще!
С помощью справки вы можете прочитать строку документации и получить представление о том, какие атрибуты может иметь класс, что очень полезно.
источник
Если это для исследования, чтобы увидеть, что происходит, я бы порекомендовал посмотреть на IPython . Это добавляет различные ярлыки для получения объектов документации, свойств и даже исходного кода. Например, добавив "?" функция даст справку для объекта (по сути, ярлык для «help (obj)», когда используется два? 's ("
func??
») будет отображаться исходный код, если он доступен.Есть также много дополнительных удобств, таких как завершение табуляции, удобная печать результатов, история результатов и т. Д., Которые делают его очень удобным для такого рода исследовательского программирования.
Для более программного использования интроспекции будут полезны базовые встроенные функции, такие как
dir()
,vars()
иgetattr
т. Д., Но вам стоит потратить время на ознакомление с модулем проверки . Чтобы получить источник функции, используйте "inspect.getsource
", например, применив ее к себе:inspect.getargspec
также часто полезно, если вы имеете дело с обертыванием или манипулированием функциями, так как оно даст имена и значения по умолчанию параметров функции.источник
Если вы заинтересованы в GUI для этого, взгляните на objbrowser . Он использует модуль проверки из стандартной библиотеки Python для внутреннего анализа объекта.
источник
Вы можете перечислить атрибуты объекта с помощью dir () в оболочке:
Конечно, есть также модуль проверки: http://docs.python.org/library/inspect.html#module-inspect
источник
источник
Попробуй ppretty
Вывод:
источник
Другие уже упоминали встроенную функцию dir (), которая звучит как то, что вы ищете, но вот еще один хороший совет. Многие библиотеки, в том числе большая часть стандартной библиотеки, распространяются в виде исходного кода. Это означает, что вы можете довольно легко прочитать исходный код напрямую. Хитрость в том, чтобы найти это; например:
Файл * .pyc скомпилирован, поэтому удалите завершающий символ 'c' и откройте не скомпилированный файл * .py в вашем любимом редакторе или средстве просмотра файлов:
Я обнаружил, что это невероятно полезно для обнаружения таких вещей, как исключения, возникающие из данного API. Подобные детали редко хорошо документированы в мире Python.
источник
Хотя
pprint
уже упоминалось другими, я хотел бы добавить некоторый контекст.pprint
могут быть востребованы разработчиками с фоном PHP, которые ищут альтернативуvar_dump()
.Объекты с атрибутом dict могут быть выгружены с помощью
pprint()
смешанного сvars()
, который возвращает__dict__
атрибут для модуля, класса, экземпляра и т. Д .:Таким образом, нет необходимости в петле .
Чтобы вывести все переменные, содержащиеся в глобальной или локальной области, просто используйте:
locals()
показывает переменные, определенные в функции.Также полезно получить доступ к функциям с их соответствующим именем в виде строкового ключа, помимо прочего :
Аналогично, используется
dir()
для просмотра содержимого модуля или атрибутов объекта.И это еще не все.
источник
Если вы хотите посмотреть на параметры и методы, как уже отмечали другие, вы можете использовать
pprint
илиdir()
Если вы хотите увидеть фактическое значение содержимого, вы можете сделать
object.__dict__
источник
Два отличных инструмента для проверки кода:
IPython . Терминал Python, который позволяет вам проверить с помощью вкладки завершения.
Затмение с плагином PyDev . Он имеет отличный отладчик, который позволяет разбивать на заданном месте и проверять объекты, просматривая все переменные в виде дерева. Вы даже можете использовать встроенный терминал, чтобы попробовать код в этом месте или набрать объект и нажать «.» чтобы он дал подсказки кода для вас.
источник
pprint и dir вместе отлично работают
источник
Для этого есть сборка библиотеки кода Python : inspect. Представлено в Python 2.7.
источник
Если вам интересно посмотреть исходный код функции, соответствующей объекту
myobj
, вы можете ввестиiPython
илиJupyter Notebook
:myobj??
источник
или
источник
Если вы хотите заглянуть внутрь живого объекта, то
inspect
модуль python - хороший ответ. В общем, это работает для получения исходного кода функций, которые определены в исходном файле где-то на диске. Если вы хотите получить источник живых функций и лямбда-выражений, которые были определены в интерпретаторе, вы можете использоватьdill.source.getsource
изdill
. Он также может получить код для связанных или несвязанных методов и функций класса, определенных в карри ... однако вы не сможете скомпилировать этот код без кода вмещающего объекта.источник
vars (obj) возвращает атрибуты объекта.
источник
Кроме того, если вы хотите просмотреть список и словари, вы можете использовать pprint ()
источник
Уже много хороших подсказок, но самый короткий и самый легкий (не обязательно лучший) еще не упомянут:
источник
Попробуйте использовать:
object
имя переменной объекта, который вы пытаетесь проверить.Это распечатывает красиво отформатированный вывод с вкладками, показывающий всю иерархию ключей и значений в объекте.
ПРИМЕЧАНИЕ: это работает в python3. Не уверен, работает ли он в более ранних версиях
ОБНОВЛЕНИЕ: Это не работает на всех типах объектов. Если вы встретите один из этих типов (например, объект запроса), используйте вместо этого один из следующих:
dir(object())
или
import pprint
затем:pprint.pprint(object.__dict__)
источник