Python вывести содержимое объекта

Как мне посмотреть внутри объекта Python?

Я начинаю программировать в различных проектах с использованием Python (включая веб-разработку Django и разработку игр Panda3D).

Чтобы помочь мне понять, что происходит, я бы хотел «заглянуть» внутрь объектов Python, чтобы увидеть, как они помечаются — как их методы и свойства.

Скажем, у меня есть объект Python, что мне нужно, чтобы распечатать его содержимое? Это вообще возможно?

Python обладает мощным набором функций для самоанализа.

type() и dir() особенно полезны для проверки типа объекта и его набора атрибутов соответственно.

Не знал, что термин «самоанализ». Это отличная помощь! А также все функции, которые вы мне дали . Спасибо!

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

Ответ от @Brian ниже показывает вам, как также просмотреть исходный код различных объектов Python из Python. Это то, что я искал изначально, и я уверен, что я не буду одинок. (Возможно, стоит включить ссылку на его ответ в этот ответ, поскольку он наиболее приемлем.)

Я думаю, что это плохой ответ. вместо того, чтобы давать нам решение, оно просто дает нам все, что связано с этим в документации

На самом деле from pprint import pprint; pprint(vars(object)) дал мне действительно хороший вид на содержание моего объекта. Спасибо @liberforce

Это отличный способ увидеть объекты, которые реализуют любые методы представления, или такие объекты, как googleapiclient.errors.HttpError, которые, когда вы их печатаете, наверняка выводят недостаточную информацию, спасибо @ mtasic85

Сначала прочитайте источник.

Читайте также:  Javascript get параметры url

Во-вторых, используйте dir() функцию.

Позволю себе не согласиться. Функция dir () работает намного быстрее, и в 99% случаев вы найдете то, что вам нужно, в сочетании с помощью help ().

Я согласен с обычно бесполезным. В большинстве случаев достаточно простого вызова dir (), что избавит вас от необходимости просматривать исходный код.

Иногда полезно проверять объекты во время выполнения, а читать источники — нет. Например, классы httplib.py и их методы :).

Я удивлен, что никто не упомянул помощь еще!

In [1]: def foo(): . "foo!" . In [2]: help(foo) Help on function foo in module __main__: foo() foo!

С помощью справки вы можете прочитать строку документации и получить представление о том, какие атрибуты может иметь класс, что очень полезно.

Затем вы используете другие методы, упомянутые здесь. Но если есть документация, считайте ее каноном.

Я не уверен, что Python обновил эту функцию за последние несколько лет, но «help (object_name)» предоставляет полный обзор в высоко структурированном формате. Это хранитель. Спасибо.

Если это для исследования, чтобы увидеть, что происходит, я бы порекомендовал посмотреть на IPython . Это добавляет различные ярлыки для получения объектов документации, свойств и даже исходного кода. Например, добавив «?» функция даст справку для объекта (по сути, ярлык для «help (obj)», когда используется два? ‘s (» func?? ») будет отображаться исходный код, если он доступен.

Есть также много дополнительных удобств, таких как завершение табуляции, удобная печать результатов, история результатов и т. Д., Которые делают его очень удобным для такого рода исследовательского программирования.

Для более программного использования интроспекции будут полезны базовые встроенные функции, такие как dir() , vars() и getattr т. Д., Но вам стоит потратить время на ознакомление с модулем проверки . Чтобы получить источник функции, используйте » inspect.getsource «, например, применив ее к себе:

>>> print inspect.getsource(inspect.getsource) def getsource(object): """Return the text of the source code for an object. The argument may be a module, class, method, function, traceback, frame, or code object. The source code is returned as a single string. An IOError is raised if the source code cannot be retrieved.""" lines, lnum = getsourcelines(object) return string.join(lines, '')

inspect.getargspec также часто полезно, если вы имеете дело с обертыванием или манипулированием функциями, так как оно даст имена и значения по умолчанию параметров функции.

Читайте также:  Website design code in css

Источник

Python вывести содержимое объекта

Начиная с 3-й версии в языке программирования Python все классы неявно имеют один общий суперкласс — object и все классы по умолчанию наследуют его методы.

Одним из наиболее используемых методов класса object является метод __str__() . Когда необходимо получить строковое представление объекта или вывести объект в виде строки, то Python как раз вызывает этот метод. И при определении класса хорошей практикой считается переопределение этого метода.

К примеру, возьмем класс Person и выведем его строковое представление:

class Person: def __init__(self, name, age): self.name = name # устанавливаем имя self.age = age # устанавливаем возраст def display_info(self): print(f"Name: Age: ") tom = Person("Tom", 23) print(tom)

При запуске программа выведет что-то наподобие следующего:

Это не очень информативная информация об объекте. Мы, конечно, можем выйти из положения, определив в классе Person дополнительный метод, который выводит данные объекта — в примере выше это метод display_info.

Но есть и другой выход — определим в классе Person метод __str__() (по два подчеркивания с каждой стороны):

class Person: def __init__(self, name, age): self.name = name # устанавливаем имя self.age = age # устанавливаем возраст def display_info(self): print(self) # print(self.__str__()) # или так def __str__(self): return f"Name: Age: " tom = Person("Tom", 23) print(tom) # Name: Tom Age: 23 tom.display_info() # Name: Tom Age: 23

Метод __str__ должен возвращать строку. И в данном случае мы возвращаем базовую информацию о человеке. Если нам потребуется использовать эту информацию в других методах класса, то мы можем использовать выражение self.__str__()

И теперь консольный вывод будет другим:

Name: Tom Age: 23 Name: Tom Age: 23

Источник

Оцените статью