Accessing source code of object in python
![]()
As we know, everything in python is an object, even function we define is also an object in Python. As a programmer, we write so many functions and also do use functions written by others.
When we define the function, we know what is written in function and how exactly it works, but when we use functions of other module we don’t know what’s the source code of it.
In this short article, you will learn method to get source code of functions in python.
To get the source code of functions in python, use inspect module. Inspect module have a set of functions using which you can get source code, documentation string, and path of file where method is defined.
Let’s understand it with simple example:
But one thing to keep in mind, inspect won’t return the source code of built-in objects and object defined interactively.
To get the code of object defined interactively you can use dill.source.getsource function.
Built-in methods of python is written in C and can only be access by directly looking into python source code.
Доступ к исходному коду Python и байт-коду
Интерпретатор Python компилирует код в байт — код перед выполнением его на виртуальной машине Python.
Вот как просмотреть байт-код функции Python
Функция dis.dis в модуле Дис возвратит декомпилированный байткод функции переданного ему.
Изучение объекта кода функции
CPython разрешает доступ к объекту кода для объекта функции.
__code__ объект содержит необработанный байт — код ( co_code ) функции, а также другую информацию , такую как константы и имена переменных.
Показать исходный код объекта Объекты, которые не являются встроенными
Чтобы напечатать исходный код использования объекта в Python inspect .Обратите внимание, что это не будет работать ни для встроенных объектов, ни для объектов, определенных в интерактивном режиме. Для этого вам понадобятся другие методы, объясненные позже.
How to retrieve source code of Python functions

Sometimes we want to know what some functions’ source codes look like or where they are, or we need to manipulate the source codes as character strings. In such cases, we need to have a convenient way to retrieve our Python functions’ source codes.
More Python Resources
There are two Python libraries that may help:
- inspect is a built-in standard library
- dill is a third-party library
inspect
inspect is a built-in library. It’s already there after you install Python on your computer. The inspect module provides several useful functions to help you get information about live objects, such as modules, classes, methods, functions, tracebacks, frame objects, and code objects. Among its many features, its capability to retrieve the source code of functions stands out.
«»» Two-dimensional size-mutable, potentially heterogeneous tabular data
structure with labeled axes (rows and columns). Arithmetic operations
align on both row a
In IPython or Jupyter, we can also use this method to retrieve the source code of the functions that we defined in the console.
def test(x): return x*2
([‘def test(x):\n’, ‘ return x*2\n’], 1)
Note that retrieving source codes of self-defined functions only works in IPython or Jupyter. If we are using plain Python and define a function interactively, we will encounter error IOError: could not get source code and will not be able to retrieve the source code. This is because its setting only supports objects loaded from files, not interactive sessions.
dill extends Python’s pickle module for serializing and deserializing Python objects to the majority of the built-in Python types. At the same time, it can also retrieve the source code of your Python objects. Please note dill is not a standard library, so you must install it separately.
Its API is quite similar to inspect ‘s.
However, a big difference between dill and inspect is that dill ‘s retrieving feature supports self-defined objects in the plain Python console.
Модуль inspect в Python
Модуль inspect Python – очень полезный модуль, который используется для интроспекции объектов в программе и просмотра исходного кода модулей, классов и функций, которые используются во всей программе.
Модуль фактически может использоваться для извлечения исходного кода самой функции, анализа аргументов, которые эта функция принимает.
Предоставление образца модуля
Сейчас мы создадим образец модуля с некоторыми функциями, классами и строками документации в Python. Вот фрагмент кода для sample.py:
Теперь, когда у нас есть образец модуля, готовый к использованию, мы можем начать извлекать и анализировать его исходный код, строку документации и детали объекта. Давайте начнем.
Изучение модуля
Давайте начнем с самоанализа определенного нами образца модуля. Обратите внимание, что для этого у нас есть файл образца модуля sample.py в том же каталоге, в котором мы выполняем наши скрипты. Вот фрагмент образца кода о том, как мы можем проверить наш модуль:
Посмотрим на результат этой программы:

Получение классов
Мы можем получить все классы, присутствующие в модуле, и предпринять действия, когда найдем класс, который искали:
Посмотрим на результат этой программы:

Изучение методов класса
На этот раз мы пойдем дальше, исследуя методы, присутствующие в классе. Обратите внимание, что мы используем один и тот же метод getmembers, отличается только идентификатор свойства, то есть isfunction:
Посмотрим на результат этой программы:

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

Получение строки документации для класса
Модуль inspect часто используется в инструментах Python, которые автоматизируют процесс извлечения классов и строк документации их методов, которые могут быть представлены конечным пользователям. Это означает, что разработчик может просто поместить строки документации в метод, и ту же строку можно использовать для представления другому разработчику приложения:

Получение исходного кода класса
В интеллектуальных средах, таких как IDE, модуль inspect используется для представления исходного кода модулей, классов и функций:
Посмотрим на результат этой программы:

Получение источника метода
На этот раз мы получаем исходный код только одного метода:
Посмотрим на результат этой программы:

Получение подписи метода
В качестве последнего примера мы получим сигнатуру метода, который часто используется в Intellisense IDE, чтобы представить разработчикам, какие аргументы принимает метод: