- 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 ... ...
Есть еще несколько методов, которые помогают в самоанализе. Вы можете изучить их, если захотите.