Skip to content

Commit 42c9543

Browse files
committed
feat: add introspection page
1 parent 0482b45 commit 42c9543

1 file changed

Lines changed: 57 additions & 0 deletions

File tree

docs/python/introspection.md

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
## Определение
2+
3+
!!! info ""
4+
**Интроспекция** (Introspection) — это способность программы исследовать тип, структуру и свойства объектов прямо во
5+
время её выполнения (runtime).
6+
7+
## Зачем нужна
8+
9+
<span class="badge">Introspection</span> позволяет писать более гибкий и универсальный код. Она незаменима при создании
10+
отладчиков, фреймворков (например, для автоматического маппинга данных в БД) или когда нужно проверить, поддерживает ли
11+
неизвестный объект определённый метод перед его вызовом.
12+
13+
## Интроспекция vs Рефлексия
14+
15+
Эти понятия часто путают, но между ними есть ключевое различие в возможностях воздействия на объект.
16+
17+
| Понятие | Суть | Пример действий |
18+
|---------------|-------------------|--------------------------------------------------------------|
19+
| Интроспекция | Изучение объекта | «Кто ты?», «Какие у тебя методы?», «Какой у тебя ID?» |
20+
| Рефлексия | Изменение объекта | «Вызови этот метод», «Создай новое поле», «Поменяй значение» |
21+
22+
## Основные инструменты
23+
Python предоставляет мощный набор встроенных функций для интроспекции любого объекта.
24+
25+
- <span class="badge">type(obj)</span> — возвращает тип объекта.
26+
27+
- <span class="badge">dir(obj)</span> — возвращает список всех атрибутов и методов объекта.
28+
29+
- <span class="badge">isinstance(obj, class)</span> — проверяет, является ли объект экземпляром класса или его наследником.
30+
31+
- <span class="badge">hasattr(obj, name)</span> — проверяет наличие атрибута с указанным именем.
32+
33+
- <span class="badge">id(obj)</span> — возвращает уникальный идентификатор (адрес в памяти) объекта.
34+
35+
- <span class="badge">callable(obj)</span> — проверяет, можно ли вызвать этот объект (функция это или нет).
36+
37+
38+
39+
## Продвинутая интроспекция
40+
41+
Для глубокого анализа живых объектов используется встроенный модуль <span class="badge">inspect</span>.
42+
Он позволяет получать исходный код функций, список аргументов, информацию о стеке вызовов и детальную структуру классов.
43+
44+
```python
45+
import inspect
46+
47+
def my_func(a, b=10):
48+
pass
49+
50+
# Получаем сигнатуру функции (её аргументы)
51+
print(inspect.signature(my_func)) # (a, b=10)
52+
```
53+
54+
## Ключевые мысли
55+
- В Python «всё является объектом», поэтому интроспекция работает абсолютно для всего: от чисел до целых модулей.
56+
- Интроспекция — это только чтение данных об объекте; для модификации используется рефлексия (через setattr, globals() и др.).
57+
- Чрезмерное использование интроспекции может усложнить понимание кода, поэтому её стоит применять там, где важна динамика и универсальность.

0 commit comments

Comments
 (0)