• en
  • Language: ru
  • Documentation version: latest

15. Интроспекция объекта

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

15.1. dir

В этом разделе мы узнаем о dir и о том, как он помогает нам в самоанализе.

Это одна из самых важных функций для интроспекции. Она возвращает список атрибутов и методов, принадлежащих объекту. Вот пример:

my_list = [1, 2, 3]
dir(my_list)
# Output: ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__',
# '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__',
# '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__',
# '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__',
# '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__',
# '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__',
# '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop',
# 'remove', 'reverse', 'sort']

Наша интроспекция дала нам имена всех методов списка. Это может быть удобно, когда вы не можете вспомнить имя метода. Если мы выполним dir() без аргумента, то он вернет все имена в текущей области видимости.

15.2. type и id.

Функция type возвращает тип объекта. Например:

print(type(''))
# Output: <type 'str'>

print(type([]))
# Output: <type 'list'>

print(type({}))
# Output: <type 'dict'>

print(type(dict))
# Output: <type 'type'>

print(type(3))
# Output: <type 'int'>

id возвращает уникальные идентификаторы различных объектов. Например:

name = "Yasoob"
print(id(name))
# Output: 139972439030304

15.3. inspect модуль

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

import inspect
print(inspect.getmembers(str))
# Output: [('__add__', <slot wrapper '__add__' of ... ...

Есть еще несколько методов, которые помогают в самоанализе. Вы можете изучить их, если захотите.