inspect
— Осмотр живых объектов¶
Исходный код: Lib/inspect.py
Модуль inspect
предоставляет несколько полезных функций для получения
информации о живых объектах, таких как модули, классы, методы, функции,
трейсбэки, объекты фреймы и объекты кода. Например, может помочь
вам исследовать содержание класса, восстановить источник кода метода,
извлечь и отформатировать список аргументов для функции или получить
всю необходимую информацию для отображения подробного трейсбэка.
Модуль предоставляет четыре основных вида услуг: проверка типов, получение исходного кода, проверка классов и функций, а также изучение стека интерпретатора.
Типы и члены¶
Функция getmembers()
извлекает члены объекта, такие как класс или модуль.
Функции, имена которых начинаются «is», главным образом обеспечены как удобный
выбор для второго аргумента getmembers()
. Они также помогут вам определить,
когда вы можете ожидать найти следующие специальные атрибуты:
Тип | Атрибут | Описание |
---|---|---|
module | __doc__ | строка документации |
__file__ | имя файла (отсутствует для встроенных модулей) | |
class | __doc__ | строка документации |
__name__ | имя, с которым был определен этот класс | |
__qualname__ | составное имя | |
__module__ | имя модуля, в котором был определен этот класс | |
method | __doc__ | строка документации |
__name__ | имя, с помощью которого был определен этот метод | |
__qualname__ | составное имя | |
__func__ | объект функции, содержащий реализацию метода | |
__self__ | сущность, с которым
связан этот метод или
None |
|
__module__ | имя модуля, в котором был определен этот метод | |
function | __doc__ | строка документации |
__name__ | имя, с которым была определена эта функция | |
__qualname__ | составное имя | |
__code__ | кодовый объект, содержащий скомпилированную функцию байт-код | |
__defaults__ | кортеж любого значения по умолчанию для позиционных или ключевой параметров | |
__kwdefaults__ | отображение любого значения по умолчанию для только ключевых параметров | |
__globals__ | глобальное пространство имен, в котором была определена эта функция | |
__annotations__ | отображение имен параметров
в аннотации; "return" ключ
зарезервирован для возвращаемой
аннотации. |
|
__module__ | имя модуля, в котором была определена эта функция | |
traceback | tb_frame | объект фрейм на этом уровне |
tb_lasti | индекс последней попытки выполнения инструкции в байт-коде | |
tb_lineno | текущий номер строки в исходном Python коде | |
tb_next | следующий внутренний объект трейсбэк (вызывается этим уровнем) | |
frame | f_back | следующий объект внешнего фрейма (вызывающий объект этим фреймом) |
f_builtins | встроенное пространство имен, видимое этим фреймом | |
f_code | объект кода выполняемый в этом фрейме | |
f_globals | глобальное пространство имен, видимое этим фрейме | |
f_lasti | индекс последней попытки выполнения команды в байт-коде | |
f_lineno | текущий номер строки в исходном Python коде | |
f_locals | локальное пространство имен, видимое этим фреймом | |
f_trace | отслеживание функции для этого
фрейма или None |
|
code | co_argcount | количество аргументов (не включая только ключевые аргументы, * или ** args) |
co_code | строка исходного скомпилированного байт-кода | |
co_cellvars | кортеж имен переменных ячейки (на который ссылается области видимости) | |
co_consts | кортеж констант используемый в байт-коде | |
co_filename | имя файла, в котором был создан этот объект кода | |
co_firstlineno | номер первой строки в исходном Python коде | |
co_flags | битовая карта флагов CO_* ,
подробнее
здесь |
|
co_lnotab | кодированный отображение номеров строк на индексы байт-кода | |
co_freevars | кортеж имен свободных переменных (на которые ссылается замыкание функции) | |
co_posonlyargcount | количество только позиционных аргументов | |
co_kwonlyargcount | число только ключевых аргументов (не включая** arg) | |
co_name | имя, с которым был определен этот объект кода | |
co_names | кортеж имен локальных переменных | |
co_nlocals | число локальных переменных | |
co_stacksize | требуемое пространство стека виртуальной машины | |
co_varnames | кортеж имен аргументов и локальных переменных | |
generator | __name__ | имя |
__qualname__ | составное имя | |
gi_frame | фрейм | |
gi_running | работает ли генератор? | |
gi_code | код | |
gi_yieldfrom | объект, итерируемый
yield from или
None |
|
coroutine | __name__ | имя |
__qualname__ | составное имя | |
cr_await | ожидаемый объект
или None |
|
cr_frame | фрейм | |
cr_running | работает ли корутин? | |
cr_code | код | |
cr_origin | где был создан
корутин или None . См.
sys.set_coroutine_origin_tracking_depth() |
|
builtin | __doc__ | строка документации |
__name__ | исходное имя этой функции или метода | |
__qualname__ | составное имя | |
__self__ | сущность, с которым
связан метод или
None |
Изменено в версии 3.5: Добавлены __qualname__
и gi_yieldfrom
атрибуты к генераторам.
__name__
атрибут генераторов теперь установлен с имени функции вместо
имени кода, и оно может теперь быть изменено.
Изменено в версии 3.7: Добавлен cr_origin
атрибут в корутины.
-
inspect.
getmembers
(object[, predicate])¶ Возвращает всех членов объекта в списке пар
(name, value)
, отсортированных по имени. Если дополнительный аргумент predicate - который вызывается с объектомvalue
каждого члена - поставляется, только члены, для которых предикат возвращает истинный значение включены.Примечание
getmembers()
возвращает только атрибуты класса, определенные в метаклассе, если аргумент является классом, и эти атрибуты были перечислены в пользовательском__dir__()
метакласс „.
-
inspect.
getmodulename
(path)¶ Возвращает имя модуля, названного файлом path, без включения имен входящих пакетов. Расширение файла проверяется по всем записям в
importlib.machinery.all_suffixes()
. Если она совпадает, то конечный компонент пути будет возвращенный с удаленным расширением. В противном случаеNone
является возвращенный.Обратите внимание, что возвращает только функции значащее название фактических модулей Python - пути, которые потенциально относятся к пакетам Python, будет все еще возвращает
None
.Изменено в версии 3.3: Функция основана непосредственно на
importlib
.
-
inspect.
ismodule
(object)¶ Возвращает
True
если объект является модулем.
-
inspect.
isclass
(object)¶ Возвращает
True
если объект является классом, встроенным или созданным в Python код.
-
inspect.
ismethod
(object)¶ Возвращает
True
, если объект является связанным методом, записанным на языке Python.
-
inspect.
isfunction
(object)¶ Возвращает
True
если объект является функцией Python, которая включает в себя функции, созданные лямбда выражением.
-
inspect.
isgeneratorfunction
(object)¶ Возвращает
True
, если объект является генератор функцией Python.Изменено в версии 3.8: Функции, упакованные в
functools.partial()
теперь возвращаютTrue
, если упакованная функция является генератор функцией Python .
-
inspect.
isgenerator
(object)¶ Возвращает
True
, если объект является генератором.
-
inspect.
iscoroutinefunction
(object)¶ Возвращает
True
если объект является функцией корутиной (функция, определенная синтаксисомasync def
).Добавлено в версии 3.5.
Изменено в версии 3.8: Функции, упакованные в
functools.partial()
now возвращаетTrue
, если упакованная функция является функцией корутиной.
-
inspect.
iscoroutine
(object)¶ Возвращает
True
, если объект является корутиной, созданным функциейasync def
.Добавлено в версии 3.5.
-
inspect.
isawaitable
(object)¶ Возвращает
True
, если объект может быть используемый в выраженииawait
.Может также быть используемый, чтобы отличить основанные на генератор сопрограммы от обычных генераторов:
def gen(): yield @types.coroutine def gen_coro(): yield assert not isawaitable(gen()) assert isawaitable(gen_coro())
Добавлено в версии 3.5.
-
inspect.
isasyncgenfunction
(object)¶ Возвращает
True
если объект является функцией асинхронным генератором, например:>>> async def agen(): ... yield 1 ... >>> inspect.isasyncgenfunction(agen) True
Добавлено в версии 3.6.
Изменено в версии 3.8: Функции обернули в
functools.partial()
теперь возвращаетTrue
, если обернутая функция - функция асинхронный генератор.
-
inspect.
isasyncgen
(object)¶ Возвращает
True
, если объект является итератор асинхронного генератора, созданным функцией асинхронным генератором.Добавлено в версии 3.6.
-
inspect.
istraceback
(object)¶ Возвращает
True
, если объект является трейсбэк.
-
inspect.
isframe
(object)¶ Возвращает
True
если объект является фреймом.
-
inspect.
iscode
(object)¶ Возвращает
True
, если объект является кодом.
-
inspect.
isbuiltin
(object)¶ Возвращает
True
, если объект является встроенной функцией или связанным встроенным методом.
-
inspect.
isroutine
(object)¶ Возвращает
True
, если объект является определяемой пользователем или встроенной функцией или методом.
-
inspect.
isabstract
(object)¶ Возвращает
True
, если объект является абстрактным базовым классом.
-
inspect.
ismethoddescriptor
(object)¶ Возвращает
True
если объект является методом дескриптор, но не еслиismethod()
,isclass()
,isfunction()
илиisbuiltin()
имеют значение true.Это, например, верно для
int.__add__
. Объект, проходящий этот тест, имеет метод__get__()
, но не метод__set__()
, но за его пределами набор атрибуты изменяется. А__name__
атрибут обычно true, а__doc__
часто есть.Методы, реализованные через дескрипторы, которые также проходят один из других тестов возвращает
False
из тестаismethoddescriptor()
, просто потому, что другие тесты обещают больше - вы можете, например, рассчитывать на наличие__func__
атрибут (и т.д.), когда объект проходитismethod()
.
-
inspect.
isdatadescriptor
(object)¶ Возвращает
True
если объект является дескриптором данных.Данные дескрипторы имеют метод
__set__
или__delete__
. Примерами являются свойства (определенные в Python), getsets и элементы. Последние два определены в C и есть более определенные тесты, доступные для тех типов, который прочен через внедрения Python. Как правило, данные дескрипторы также будут иметь__name__
и__doc__
атрибуты (свойства, getsets и члены имеют оба этих атрибуты), но это не гарантировано.
-
inspect.
isgetsetdescriptor
(object)¶ Возвращает
True
, если объект является getset дескриптор.Детали реализации CPython: getsets атрибуты определяются в модулях расширений через
PyGetSetDef
структурах. Для внедрений Python без таких типов этот метод всегда будет возвращаетFalse
.
-
inspect.
ismemberdescriptor
(object)¶ Возвращает
True
если объект является членом дескриптор.Детали реализации CPython: Элементы дескрипторы атрибуты определяются в расширительных модулях через
PyMemberDef
структурах. Для внедрений Python без таких типов этот метод всегда будет возвращаетFalse
.
Восстановление исходного кода¶
-
inspect.
getdoc
(object)¶ Получить строку документации для объекта, очищенный с помощью
cleandoc()
. Если документация строка для объекта не предоставляется, а объект является классом, методом, свойством или дескриптор, извлеките документацию строка из иерархии наследования.Изменено в версии 3.5: Строки документации теперь наследуются, если не переопределяются.
-
inspect.
getcomments
(object)¶ Возвращает в единственной строке любые строки комментариев, немедленно предшествующих источнику объекта код (для класса, функции или метода), или наверху исходного файла Python (если объект - модуль). Если исходный код объекта недоступен, возвращает
None
. Это может произойти, если объект определен в C или интерактивной оболочке.
-
inspect.
getfile
(object)¶ Возвращает имя (текстового или двоичного) файла, в котором был определен объект. Это потерпит неудачу с
TypeError
, если объект будет встроенным модулем, классом или функцией.
-
inspect.
getmodule
(object)¶ Попробовать угадать, в каком модуле был определен объект.
-
inspect.
getsourcefile
(object)¶ Возвращает имя файла источника Python, в котором был определен объект. Это потерпит неудачу с
TypeError
, если объект будет встроенным модулем, классом или функцией.
-
inspect.
getsourcelines
(object)¶ Возвращает список исходных строк и номер начальной строки для объекта. Аргумент может быть модулем, классом, методом, функцией, трейсбэк, фреймом или объектом код. Источник код - возвращенный как список линий, соответствующих объекту и номеру линии, указывает, где в файле первоисточника первая линия код была найдена.
OSError
поднят, если источник код не может быть восстановлен.
-
inspect.
getsource
(object)¶ Возвращает текст источника код для объекта. Аргумент может быть модулем, классом, методом, функцией, трейсбэк, фреймом или объектом код. Источник код является возвращенный как единственным строка. Поднимается
OSError
, если исходный код не может быть восстановлен.
-
inspect.
cleandoc
(doc)¶ Очистить отступы от строк документации, которые имеют отступ для выравнивания с блоками кода.
Все ведущие пробелы удаляются из первой строки. Все ведущие пробелы, которые могут быть равномерно удалены из второй строки, удаляются. Пустые строки в начале и конце впоследствии удаляются. Кроме того, все вкладки развернуты до пробелов.
Внутренний анализ вызываемых с объектом Signature¶
Добавлено в версии 3.3.
Объект Signature представляет собой сигнатуру вызова вызываемого объекта и его
возвращаемой аннотации. Для получения объекта Signature используйте функцию
signature()
.
-
inspect.
signature
(callable, *, follow_wrapped=True)¶ Возвращает
Signature
возражают для данногоcallable
:>>> from inspect import signature >>> def foo(a, *, b:int, **kwargs): ... pass >>> sig = signature(foo) >>> str(sig) '(a, *, b:int, **kwargs)' >>> str(sig.parameters['b']) 'b:int' >>> sig.parameters['b'].annotation <class 'int'>
Принимает широкий спектр вызываемых Python, от простых функций и классов к объектам
functools.partial()
.Вызывает
ValueError
, если невозможно предоставить сигнатура, иTypeError
, если этот тип объекта не поддерживается.Косая черта (/) в сигнатура функции означает, что предшествующие ей параметры являются только позиционными. Дополнительные сведения см. в разделе запись FAQ по позиционным параметрам.
Добавлено в версии 3.5: Параметр
follow_wrapped
. ПередайтеFalse
, чтобы получить сигнатуруcallable
конкретно (callable.__wrapped__
не будет используемый, чтобы развернуть декорируемые вызываемые.)Примечание
Некоторые вызываемые объекты не могут быть интроспективными в некоторых реализациях Python. Например, в CPython некоторые встроенные функции, определенные в C, не предоставляют метаданных о своих аргументах.
-
class
inspect.
Signature
(parameters=None, *, return_annotation=Signature.empty)¶ Объект Signature представляет вызываемую сигнатуру функции и ее возвращаемой аннотации. Для каждого параметра, принимаемого функцией, он сохраняет объект
Parameter
в своей коллекцииparameters
.Необязательный аргумент parameters - это последовательность объектов
Parameter
, которая проверяется для проверки отсутствия параметров с повторяющимися именами, а также того, что параметры находятся в правильном порядке, т.е. сначала только позиции, затем позиционный-или-ключевой, и что параметры со значениями по умолчанию следуют за параметрами без значений по умолчанию.Необязательный аргумент return_annotation, может быть произвольным объектом Python, является аннотацией «возвращает» вызываемого объекта.
Объекты Signature являются имутабельными. Используйте команду
Signature.replace()
для создания измененной копии.Изменено в версии 3.5: Объекты Signature являются picklable и хэшируемыми.
-
empty
¶ Специальный маркер уровня класса, чтобы определить отсутствие аннотации возвращает.
-
parameters
¶ Упорядоченное отображение имен параметров на соответствующие объекты
Parameter
. Параметры отображаются в строгом порядке определения, включая параметры ключевой-only.Изменено в версии 3.7: Python только явно гарантировал, что он сохранил порядок объявления параметров ключевой-only по версии 3.7, хотя на практике этот порядок всегда сохранялся в Python 3.
-
return_annotation
¶ Аннотация «return» для вызываемого объекта. Если у подлежащего выкупу нет аннотации «return», этот атрибут установлен в
Signature.empty
.
-
bind
(*args, **kwargs)¶ Создание сопоставления позиционных и ключевой аргументов с параметрами. Возвращает
BoundArguments
если*args
и**kwargs
соответствуют сигнатура, или поднимаетTypeError
.
-
bind_partial
(*args, **kwargs)¶ Работает так же, как
Signature.bind()
, но допускает опущение некоторых обязательных аргументов (имитирует поведениеfunctools.partial()
.) возвращаетBoundArguments
, или вызываетTypeError
, если переданные аргументы не соответствуют сигнатура.
-
replace
(*[, parameters][, return_annotation])¶ Создание новой Signature сущности на основе вызванной замены сущность в. Можно передавать различные
parameters
и/илиreturn_annotation
для переопределения соответствующих свойств базовой сигнатура. Чтобы удалить return_annotation из скопированной подписи, передайтеSignature.empty
.>>> def test(a, b): ... pass >>> sig = signature(test) >>> new_sig = sig.replace(return_annotation="new return anno") >>> str(new_sig) "(a, b) -> 'new return anno'"
-
-
classmethod
Signature.
from_callable
(obj, *, follow_wrapped=True)¶ Возвращает
Signature
(или его подкласс) возражают для данного подлежащего вызовуobj
. Передайтеfollow_wrapped=False
, чтобы получить сигнатуруobj
без разворачивания его__wrapped__
цепи.Этот способ упрощает подклассирование
Signature
:class MySignature(Signature): pass sig = MySignature.from_callable(min) assert isinstance(sig, MySignature)
Добавлено в версии 3.5.
-
class
inspect.
Parameter
(name, kind, *, default=Parameter.empty, annotation=Parameter.empty)¶ Объекты параметров являются неизменный. Вместо изменения объекта Parameter можно использовать
Parameter.replace()
для создания измененной копии.Изменено в версии 3.5: Объекты параметров являются выбираемыми и хэшируемыми.
-
empty
¶ Специальный маркер уровня класса для указания отсутствия значения и аннотаций по умолчанию.
-
name
¶ Имя параметра как строка. Имя должно быть допустимым идентификатором Python.
Детали реализации CPython: CPython формирует неявные имена параметров формы
.0
на код объектах используемый для реализации понятий и выражений генератор.Изменено в версии 3.6: Эти имена параметров предоставляются этим модулем в виде имен, таких как
implicit0
.
-
default
¶ Значение по умолчанию для параметра. Если у параметра нет дефолта значение, этот атрибут установлен в
Parameter.empty
.
-
annotation
¶ Аннотация для параметра. Если у параметра нет аннотации, этот атрибут установлен в
Parameter.empty
.
-
kind
¶ Описывает привязку аргумента значения к параметру. Возможное значения (доступно через
Parameter
, например,Parameter.KEYWORD_ONLY
):Имя Смысл POSITIONAL_ONLY Значение должно быть указано как позиционный аргумент. Позиционными являются только те параметры, которые появляются перед записью /
(если она присутствует) в определении функции Python.POSITIONAL_OR_KEYWORD Значение может быть представлено в виде ключевого или позиционного аргумента (это стандартное поведение биндинга для функций, реализованных в Python.) VAR_POSITIONAL Кортеж позиционных аргументов, не связанных ни с одним другим параметром. Это соответствует параметру *args
в определении функции Python.KEYWORD_ONLY Значение должно быть указано в качестве ключевого аргумента. Только ключевых параметры - это параметры, которые появляются после записи *
или*args
в определении функции Python.VAR_KEYWORD Словарь ключевых аргументов, которые не привязаны к какому-либо другому параметру. Это соответствует параметру **kwargs
в определении функции Python.Пример: печать всех только-ключевых аргументов без значения по умолчанию:
>>> def foo(a, b, *, c, d=10): ... pass >>> sig = signature(foo) >>> for param in sig.parameters.values(): ... if (param.kind == param.KEYWORD_ONLY and ... param.default is param.empty): ... print('Parameter:', param) Parameter: c
-
kind.
description
¶ Описание перечисления значение Parameter.kind.
Добавлено в версии 3.8.
Пример: печать всех описаний аргументов:
>>> def foo(a, b, *, c, d=10): ... pass >>> sig = signature(foo) >>> for param in sig.parameters.values(): ... print(param.kind.description) positional or keyword positional or keyword keyword-only keyword-only
-
replace
(*[, name][, kind][, default][, annotation])¶ Создать новый параметр, на который был призван сущность на основе замененного сущность. Чтобы переопределить
Parameter
атрибут, передайте соответствующий аргумент. Чтобы удалить значение по умолчанию или/и аннотацию из параметра, передайте командуParameter.empty
.>>> from inspect import Parameter >>> param = Parameter('foo', Parameter.KEYWORD_ONLY, default=42) >>> str(param) 'foo=42' >>> str(param.replace()) # Создаст поверхностую копию "param" 'foo=42' >>> str(param.replace(default=Parameter.empty, annotation='spam')) "foo:'spam'"
Изменено в версии 3.4: В параметре Python 3.3 объектам позволили иметь набор
name
кNone
, если ихkind
был установлен вPOSITIONAL_ONLY
. Это больше не разрешено.
-
-
class
inspect.
BoundArguments
¶ Результат вызова
Signature.bind()
илиSignature.bind_partial()
. Содержит сопоставление аргументов с параметрами функции.-
arguments
¶ Упорядоченное, изменяемое сопоставление (
collections.OrderedDict
) имен параметров с аргументами значения. Содержит только явно связанные аргументы. Изменения вarguments
отразятся вargs
иkwargs
.Should be used in conjunction with
Signature.parameters
for any argument processing purposes.Примечание
Аргументы, для которых
Signature.bind()
илиSignature.bind_partial()
полагались на значение по умолчанию, пропускаются. Однако при необходимости используйте командуBoundArguments.apply_defaults()
для их добавления.
-
apply_defaults
()¶ Дефолт набора значения для недостающих аргументов.
Для переменных позиционных аргументов (
*args
) по умолчанию используется пустой кортеж.Для аргументов variable-ключевой (
**kwargs
) по умолчанию используется пустое словарь.>>> def foo(a, b='ham', *args): pass >>> ba = inspect.signature(foo).bind('spam') >>> ba.apply_defaults() >>> ba.arguments OrderedDict([('a', 'spam'), ('b', 'ham'), ('args', ())])
Добавлено в версии 3.5.
args
и свойстваkwargs
могут быть используемый, чтобы призвать функции:def test(a, *, b): ... sig = signature(test) ba = sig.bind(10, b=20) test(*ba.args, **ba.kwargs)
-
См.также
- PEP 362 - объект Signature функции.
- Подробная спецификация, детали реализации и примеры.
Классы и функции¶
-
inspect.
getclasstree
(classes, unique=False)¶ Упорядочить заданный список классов в иерархию вложенных списков. При появлении вложенного списка он содержит классы, полученные из класса, запись которого непосредственно предшествует списку. Каждая запись представляет собой 2-кортеж, содержащий класс и кортеж его базовых классов. Если аргумент уникальный имеет значение true, в структуре возвращенный для каждого класса в данном списке отображается ровно одна запись. В противном случае классы, использующие несколько наследований и их потомки, появятся несколько раз.
-
inspect.
getargspec
(func)¶ Получить имена и значения по умолчанию параметров функции Python. Возвращает — Именованный кортеж
ArgSpec(args, varargs, keywords, defaults)
. args - список имен параметров. varargs и keywords - имена параметров*
и**
илиNone
. defaults - кортеж аргументов по умолчанию значения илиNone
при отсутствии аргументов по умолчанию; если этот кортеж имеет элементы n, они соответствуют последним элементам n, перечисленным в args.Не рекомендуется, начиная с версии 3.0: Используйте
getfullargspec()
для обновленного API, который обычно является вставной заменой, но также правильно обрабатывает аннотации функций и параметры ключевой-only.В качестве альтернативы используйте
signature()
и Объект Signature, которые обеспечивают более структурированный API интроспекции для вызываемых устройств.
-
inspect.
getfullargspec
(func)¶ Получить имена и значения по умолчанию параметров функции Python. А Возвращает именованный кортеж:
FullArgSpec(args, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, annotations)
args - список имен позиционных параметров. varargs - имя параметра
*
илиNone
, если произвольные позиционные аргументы не принимаются. varkw - имя параметра**
илиNone
, если произвольные аргументы ключевой не принимаются. defaults является n-tuple аргумента по умолчанию значения, соответствующего последним n позиционным параметрам, илиNone
, если такие значения по умолчанию не определены. kwonlyargs - список имен параметров ключевой-only в порядке объявления. kwonlydefaults - словарь, наносящий на карту названия параметра от kwonlyargs до значения используемый по умолчанию, если никакой аргумент не поставляется. annotations - словарь, сопоставляющий имена параметров аннотациям. Специальный ключевой"return"
- используемый, чтобы сообщить об аннотации возвращает значение функции (если таковые имеются).Обратите внимание, что
signature()
и Объект Signature предоставляют рекомендуемый API для вызываемого самоанализа и поддерживают дополнительное поведение (например, аргументы только для позиций), которое иногда встречается в модуле расширения API. Эта функция сохранена, прежде всего, для использования в код, который должен поддержать совместимость с API Python 2inspect
модуля.Изменено в версии 3.4: Эта функция теперь основана на
signature()
, но по-прежнему игнорирует__wrapped__
атрибуты и включает уже связанный первый параметр в выходные данные сигнатура для связанных методов.Изменено в версии 3.6: Этот метод был ранее задокументирован как устаревший в пользу
signature()
в Python 3.5, но это решение было отменено, чтобы восстановить четко поддерживаемый стандартный интерфейс для одноисточника Python 2/3 код, перемещающегося от устаревшего APIgetargspec()
.Изменено в версии 3.7: Python только явно гарантировал, что он сохранил порядок объявления параметров ключевой-only по версии 3.7, хотя на практике этот порядок всегда сохранялся в Python 3.
-
inspect.
getargvalues
(frame)¶ Получение сведений о аргументах, переданных в определенный фрейм. Возвращает именованный кортеж
ArgInfo(args, varargs, keywords, locals)
. args - список имен аргументов. varargs и keywords - имена аргументов*
и**
илиNone
. locals - локальный словарь данного фрейма.Примечание
Эта функция была случайно помечена как устаревшая в Python 3.5.
-
inspect.
formatargspec
(args[, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, annotations[, formatarg, formatvarargs, formatvarkw, formatvalue, formatreturns, formatannotations]])¶ Форматировать довольно аргумент spec из значения возвращенный по
getfullargspec()
.Первые семь аргументов (
args
,varargs
,varkw
,defaults
,kwonlyargs
,kwonlydefaults
,annotations
).Другие шесть аргументов - функции, которые вызваны, чтобы повернуть имена аргумента, имя аргумента
*
, имя аргумента**
, дефолт значения, аннотация возвращает и отдельные аннотации в строки, соответственно.Например:
>>> from inspect import formatargspec, getfullargspec >>> def f(a: int, b: float): ... pass ... >>> formatargspec(*getfullargspec(f)) '(a: int, b: float)'
Не рекомендуется, начиная с версии 3.5: Используйте
signature()
и Сигнатуру объекта, которые обеспечивают лучший интерфейс API для поиска вызовов.
-
inspect.
formatargvalues
(args[, varargs, varkw, locals, formatarg, formatvarargs, formatvarkw, formatvalue])¶ Форматировать довольно аргумент spec из четырех значения возвращенный по
getargvalues()
. Аргументы формата* являются соответствующими необязательными функциями форматирования, вызываемыми для преобразования имен и значения в строки.Примечание
Эта функция была случайно помечена как устаревшая в Python 3.5.
-
inspect.
getmro
(cls)¶ Возвращает кортеж базовых классов cls, включая cls, в порядке разрешения метода. Ни один класс не появляется более одного раза в этом кортеже. Обратите внимание, что порядок разрешения метода зависит от типа cls. Если не используется очень специфический определяемый пользователем метатип, cls будет первым элементом кортежа.
-
inspect.
getcallargs
(func, /, *args, **kwds)¶ Привязать args и kwds к именам аргументов функции Python или метода func, как если бы он вызывался с ними. Для связанных методов свяжите также первый аргумент (как правило, названный
self
) к связанному сущность. словарь - возвращенный, нанося на карту имена аргумента (включая названия*
и аргументов**
, если таковые имеются) к их значения от args и kwds. В случае призыва func неправильно, т.е. каждый раз, когдаfunc(*args, **kwds)
поднял бы исключение из-за несовместимого сигнатура, поднято исключение того же типа и того же или подобного сообщения. Например:>>> from inspect import getcallargs >>> def f(a, b=1, *pos, **named): ... pass >>> getcallargs(f, 1, 2, 3) == {'a': 1, 'named': {}, 'b': 2, 'pos': (3,)} True >>> getcallargs(f, a=2, x=4) == {'a': 2, 'named': {'x': 4}, 'b': 1, 'pos': ()} True >>> getcallargs(f) Traceback (most recent call last): ... TypeError: f() missing 1 required positional argument: 'a'
Добавлено в версии 3.2.
Не рекомендуется, начиная с версии 3.5: Используйте
Signature.bind()
иSignature.bind_partial()
.
-
inspect.
getclosurevars
(func)¶ Получить отображение внешних ссылок имени в функции Python или метода func к их текущему значения. Возвращает именованный кортеж
ClosureVars(nonlocals, globals, builtins, unbound)
. Отображения nonlocals сослались на имена к лексическим переменным замыкания, globals к модулю функции globals и builtins к builtins видимому от тела функции. unbound - это набор имен, на которые ссылаются в функции и которые не могут быть разрешены с учетом текущих глобалей и построений модулей.TypeError
вызывается, если func не является функцией или методом Python.Добавлено в версии 3.3.
-
inspect.
unwrap
(func, *, stop=None)¶ Получение объекта, завернутого func. Он следует за цепочкой
__wrapped__
атрибуты, возвращающей последний объект в цепочке.stop - дополнительный колбэк, принимающий объект в цепи обертки как собственный аргумент, который позволяет разворачиванию быть законченным рано если колбэк возвращает истинный значение. Если колбэк никогда возвращает истинный значение, последний объект в цепи - возвращенный, как обычно. Например,
signature()
использует это для прекращения развертки, если какой-либо объект в цепочке имеет определенный__signature__
атрибут.Поднимается
ValueError
при обнаружении цикла.Добавлено в версии 3.4.
Стек интерпретатора¶
При выполнении следующих функций возвращает «фрейм записей» каждая запись
является именованным кортежем
FrameInfo(frame, filename, lineno, function, code_context, index)
.
Кортеж содержит объект фрейма, имя файла, номер текущей строки, имя функции, список строк
контекст из исходного код и индекс текущей строки в этом списке.
Изменено в версии 3.5: Возвращает именованный кортеж вместо кортежа.
Примечание
Сохранение ссылок на фреймовые объекты, обнаруженных в первом элементе фрейма, записывает эти функции возвращает, может привести к тому, что программа создаст циклы привязок. Как только справочный цикл был создан, продолжительность жизни всех объектов, к которым можно получить доступ от объектов, которые формируют цикл, может стать намного более длинной, даже если дополнительный датчик цикла Python’s включен. Если такие циклы должны создаваться, важно обеспечить их явный разрыв, чтобы избежать задержки разрушения объектов и увеличения потребления памяти.
Хотя датчик цикла поймает их, разрушение структур (и переменные локальная)
может быть сделано детерминированным, удалив цикл в finally
клаузула. Это
также важно, если датчик цикла был отключен, когда Python был собран или
использующий gc.disable()
. Например:
def handle_stackframe_without_leak():
frame = inspect.currentframe()
try:
# сделать что-то с фреймом
finally:
del frame
Если необходимо сохранить рамку (например, напечатать трейсбэк позже), можно
также разорвать циклы привязок с помощью метода frame.clear()
.
Необязательный аргумент context, поддерживаемый большинством этих функций, определяет количество строк от контекст до возвращает, которые расположены по центру вокруг текущей строки.
-
inspect.
getframeinfo
(frame, context=1)¶ Получение информации о фрейме или объекте трейсбэк. Возвращает именованный кортеж
Traceback(filename, lineno, function, code_context, index)
.
-
inspect.
getouterframes
(frame, context=1)¶ Получение списка записей кадров для кадра и всех внешних кадров. Эти кадры представляют вызовы, которые приводят к созданию frame. Первая запись в списке возвращенный представляет frame; последняя запись представляет самый внешний вызов в стеке frame.
Изменено в версии 3.5: Список возвращенных именованных кортежей
FrameInfo(frame, filename, lineno, function, code_context, index)
.
-
inspect.
getinnerframes
(traceback, context=1)¶ Получение списка записей кадров для кадра трейсбэк и всех внутренних кадров. Эти кадры представляют вызовы, сделанные в результате frame. Первая запись в списке представляет traceback; последняя запись представляет место возникновения исключения.
Изменено в версии 3.5: Список именованных кортежей
FrameInfo(frame, filename, lineno, function, code_context, index)
является возвращенный.
-
inspect.
currentframe
()¶ Возвращает объект фрейма для кадра стека вызывающего фрейма.
Детали реализации CPython: Эта функция полагается на поддержку структуры стека Python в интерпретатор, который, как гарантируют, не будет существовать во всех внедрениях Python. Если управление во внедрении без структуры стека Python поддерживает этот возвращает
None
функции.
-
inspect.
stack
(context=1)¶ Возвращает список записей кадров для стека вызывающего абонента. Первая запись в списке возвращенный представляет вызывающего абонента; последняя запись представляет самый внешний вызов в стеке.
Изменено в версии 3.5:
FrameInfo(frame, filename, lineno, function, code_context, index)
возвращает список именованных кортежей.
-
inspect.
trace
(context=1)¶ Возвращает список записей кадров для стека между текущим кадром и кадром, в котором возникло исключение, обрабатываемое в данный момент. Первая запись в списке представляет вызывающего абонента; последняя запись представляет место возникновения исключения.
Изменено в версии 3.5:
FrameInfo(frame, filename, lineno, function, code_context, index)
возвращает список именованных кортежей.
Выборка атрибутов статически¶
И getattr()
, и hasattr()
могут инициировать выполнение код при
выборке или проверке существования атрибуты. Дескрипторы, как и свойства,
будут вызываться и могут вызываться __getattr__()
и __getattribute__()
.
В случаях, когда требуется пассивный анализ, например, средства
документирования, это может быть неудобно. getattr_static()
имеет те же сигнатура,
что и getattr()
, но избегает выполнения код, когда получает
атрибуты.
-
inspect.
getattr_static
(obj, attr, default=None)¶ Извлечение атрибуты без запуска динамического поиска по протоколу дескриптор,
__getattr__()
или__getattribute__()
.Примечание: эта функция может быть не в состоянии извлечь все атрибуты, которые getattr может извлечь (например, динамически созданный атрибуты), и может найти, что getattr не может (как атрибуты, которые вызывают Attrib дескрипторы Error). Это может также объекты возвращает дескрипторы вместо членов сущность.
Если сущность
__dict__
затеняется другим членом (например, свойством), то эта функция не сможет найти элементы сущность.Добавлено в версии 3.2.
getattr_static()
не разрешает дескрипторы, например slot дескрипторы или getset
дескрипторы на объектах, реализованных в C. Объект дескриптор является
возвращенный вместо нижележащего атрибут.
Вы можете справиться с этим с помощью код, как следующее. Обратите внимание, что для произвольного getset дескрипторы, призывающего, они могут вызвать выполнение код:
# пример кода для разрешения типов встроенных дескрипторов
class _foo:
__slots__ = ['foo']
slot_descriptor = type(_foo.foo)
getset_descriptor = type(type(open(__file__)).name)
wrapper_descriptor = type(str.__dict__['__add__'])
descriptor_types = (slot_descriptor, getset_descriptor, wrapper_descriptor)
result = getattr_static(some_object, 'foo')
if type(result) in descriptor_types:
try:
result = result.__get__()
except AttributeError:
# дескрипторы может поднять AttributeError, чтобы указать, что есть не основной
# значение, в этом случае, сам дескриптор должен будет сделать
pass
Текущее состояние генераторов и корутинов¶
При реализации планировщиков корутин и для других расширенных применений
генераторов полезно определить, выполняется ли генератор в настоящее время,
ожидает ли он запуска, возобновления или выполнения или уже завершен.
getgeneratorstate()
позволяет текущему состояние генератор быть определенным легко.
-
inspect.
getgeneratorstate
(generator)¶ Получите текущий состояние генератор-итератор.
- Возможные состояния:
- GEN_CREATED: Ожидание начала выполнения.
- GEN_RUNNING: в настоящее время выполняется интерпретатор.
- GEN_SUSPENDED: В настоящее время приостановлено в выражении yield.
- GEN_CLOSED: выполнение завершено.
Добавлено в версии 3.2.
-
inspect.
getcoroutinestate
(coroutine)¶ Получение текущего состояния объекта корутины. Функция предназначена для используемый с объектами корутины, созданными функциями
async def
, но принимает любой объект корутины, имеющейcr_running
иcr_frame
атрибуты.- Возможные состояния:
- CORO_CREATED: Ожидание начала выполнения.
- CORO_RUNNING: в настоящее время выполняется интерпретатор.
- CORO_SUSPENDED: В настоящее время приостановлено в выражении await.
- CORO_CLOSED: выполнение завершено.
Добавлено в версии 3.5.
Можно также запросить текущее внутреннее состояние генератор. Это в основном полезно для целей тестирования, чтобы обеспечить обновление внутренних состояние в соответствии с ожиданиями:
-
inspect.
getgeneratorlocals
(generator)¶ Получите отображение живых переменных локальная в generator к их текущему значения. Словарь - возвращенный, который наносит на карту от имен переменной до значения. Это эквивалент вызова
locals()
в теле генератор, и все те же оговорки применимы.Если generator - генератор без в настоящее время связанной структуры, то пустой словарь - возвращенный.
TypeError
вызывается, если generator не является объектом Python генератор.Детали реализации CPython: Эта функция полагается на генератор, выставляющий структуру стека Python для самоанализа, который, как гарантируют, не будет иметь место во всех внедрениях Python. В таких случаях эта функция всегда будет возвращает пустой словарь.
Добавлено в версии 3.3.
-
inspect.
getcoroutinelocals
(coroutine)¶ Эта функция аналогична функции
getgeneratorlocals()
, но работает для объектов корутины, созданных функциямиasync def
.Добавлено в версии 3.5.
Битовые флаги объектов кода¶
Объекты Python код имеют co_flags
атрибут, являющийся
растровым изображением следующих флагов:
-
inspect.
CO_OPTIMIZED
¶ Объект код оптимизирован, с помощью быстрых локальных.
-
inspect.
CO_NEWLOCALS
¶ Если установлено, новый словарь будет создан для
f_locals
структуры, когда объект код будет выполнен.
-
inspect.
CO_VARARGS
¶ Объект код имеет переменный позиционный параметр (
*args
-подобный).
-
inspect.
CO_VARKEYWORDS
¶ Объект код имеет переменный параметр ключевой (
**kwargs
-like).
-
inspect.
CO_NESTED
¶ Флаг устанавливается в том случае, если код объект является вложенной функцией.
-
inspect.
CO_GENERATOR
¶ Флаг установлен, когда объект код - функция генератор, т.е. объект генератор - возвращенный, когда объект код выполнен.
-
inspect.
CO_NOFREE
¶ Флаг устанавливается при отсутствии свободных переменных или переменных ячейки.
-
inspect.
CO_COROUTINE
¶ Флаг установлен, когда объект код - функция сопрограммы. Когда объект код выполнен это возвращает объект сопрограммы. Дополнительные сведения см. в разделе PEP 492.
Добавлено в версии 3.5.
-
inspect.
CO_ITERABLE_COROUTINE
¶ Флаг - используемый, чтобы преобразовать генераторы в основанные на генератор сопрограммы. Объекты генератора с этим флагом могут быть используемый в выражении
await
, и могут объекты сопрограммыyield from
. Дополнительные сведения см. в разделе PEP 492.Добавлено в версии 3.5.
-
inspect.
CO_ASYNC_GENERATOR
¶ Флаг устанавливается, когда объект код является асинхронной функцией генератор. Когда объект код выполнен это возвращает асинхронный объект генератор. Дополнительные сведения см. в разделе PEP 525.
Добавлено в версии 3.6.
Примечание
Флаги специфичны для CPython и не могут быть определены в других реализациях
Python. Кроме того, флаги - деталь внедрения, и могут быть удалены или
осуждены в будущих выпусках Python. Рекомендуется использовать public
API из модуля inspect
для любых потребностей в самоанализе.
Интерфейс командной строки¶
Модуль inspect
также обеспечивает базовую возможность самоанализа из
командной строки.
По умолчанию принимает имя модуля и печатает источник этого модуля. Вместо этого класс или функция в модуле могут быть напечатаны путем добавления двоеточия и квалифицированного имени целевого объекта.
-
--details
¶
Информация о печати об указанном объекте, а не источнике код