Инспекция объектов Python: доступ к методам и свойствам

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если вам необходимо изучить атрибуты объекта в Python, воспользуйтесь функцией dir(). Чтобы получить значения этих атрибутов, примените getattr():

Python
Скопировать код
obj = YourObject()
attributes = [attr for attr in dir(obj) if not attr.startswith('__')]  # исключаем системные атрибуты
for attr in attributes:
    print(f"{attr}:", getattr(obj, attr))

Такой подход исключает системные методы, позволяя сосредоточиться на атрибутах, определённых пользователем, и обеспечивая общий обзор структуры объекта.

Кинга Идем в IT: пошаговый план для смены профессии

Подробнее о самоанализе объекта

Давайте начнём с основ и проникнем глубже в самоанализ объекта.

К какому типу ты принадлежишь?

С помощью type() мы можем узнать класс объекта, что позволит нам лучше понять, какие операции поддерживает данный объект:

Python
Скопировать код
print(type(obj))  # Вывод: <class '__main__.YourObject'>

Открой мне свои секреты

Функция vars() позволяет вам пропустить этап создания списка в функции dir() и сразу обратиться к __dict__ объекта:

Python
Скопировать код
print(vars(obj))  # Вывод: {'attr': значение, ...}

Есть ли у тебя данный ключ?

Прежде чем запрашивать атрибут, который, возможно, отсутствует, проверим его наличие с помощью функции hasattr(), чтобы избежать ошибки AttributeError:

Python
Скопировать код
if hasattr(obj, 'attr'):
    print(getattr(obj, 'attr'))  # Вывод: значение

Можем ли мы тебя вызвать?

Функция callable() проверяет, возможно ли обращение к объекту, как к функции:

Python
Скопировать код
if callable(obj):
    result = obj()

Заглянем за кулисы

Изучаем глобальные и локальные пространства имен при помощи функций globals() и locals(), крайне полезных при отладке кода:

Python
Скопировать код
print(globals())  # Вывод глобального пространства имен
print(locals())  # Вывод локального пространства имен

Нужнa дополнительная помощь?

Функция help() поможет нам при проведении исследования по модулям, классам и функциям:

Python
Скопировать код
help(obj)

Визуализация

Представим себе, что изучение объекта в Python — это работа детектива, исследующего некий таинственный чемодан:

Markdown
Скопировать код
Py-Объект: Внутри {'attr1': value1, 'method1': <function>...}

Детектив:

Markdown
Скопировать код
🕵️‍♂️ Рассмотрим ближе 🔍
- **dir()**: Что содержит этот чемодан?
- **type()**: Кто его производитель?
- **id()**: Его уникальный серийный номер
- **getattr()**: Доступ к отдельным вещам в чемодане

Таким образом, все тайные закоулки объекта становятся обнаженными перед нами!

Продвинутая эксплуатация модуля inspect

Модуль inspect представляет собой набор инструментов для глубинного анализа объектов. С его помощью можно изучить функции и прочитать исходный код объекта:

  • С функцией inspect.getmembers() можно найти все атрибуты объекта:
Python
Скопировать код
import inspect
print(inspect.getmembers(obj))
  • Отфильтруем атрибуты и найдем только методы с помощью inspect.isfunction() или inspect.ismethod():
Python
Скопировать код
methods = [m for m in inspect.getmembers(obj, predicate=inspect.isfunction)]
  • Определяем требуемые параметры для вызова функции с помощью inspect.signature():
Python
Скопировать код
print(inspect.signature(obj.some_method))

Исследование исходного кода

Функция inspect.getsource() позволяет нам увидеть исходный код функции:

Python
Скопировать код
print(inspect.getsource(obj.method))

Всемогущий dict

В __dict__ скрыты атрибуты объекта. Давайте исследуем их:

Python
Скопировать код
print(obj.__dict__)

Полезные материалы

  1. Официальная документация Python модуля inspect — подробное ознакомление с модулем inspect.
  2. Понятие атрибута __dict__ в Python — детальный анализ __dict__ в объектах Python.
  3. Примеры практического использования функции vars() в Python — применение vars() для доступа к словарю объекта.
  4. Методы управления атрибутами объектов в Python: getattr(), setattr(), hasattr() — инструкция по работе с атрибутами объектов.
  5. Использование функции type() в Python для самоанализа — методы использования type() для исследования объектов.
  6. Детальное руководство по работе с PyCFunction — обзор функций C в Python согласно документации Python 3.12.1 C API.