Как перечислить все функции в модуле?
У меня установлен модуль на Python, и я хотел бы узнать, какие функции/классы/методы доступны в нем.
Я хочу вызвать функцию help
для каждого из них. В Ruby я могу сделать что-то вроде ClassName.methods
, чтобы получить список всех методов, доступных в этом классе. Есть ли что-то подобное в Python?
Например, что-то вроде:
from somemodule import foo
print(foo.methods) # или как правильно вызвать
5 ответ(ов)
Вы можете использовать dir(module)
, чтобы увидеть все доступные методы и атрибуты. Также рекомендую ознакомиться с документацией по Python (PyDocs).
После того как вы импортировали модуль, вы можете просто выполнить:
help(modulename)
... чтобы получить документацию ко всем функциям сразу в интерактивном режиме. Либо вы можете использовать:
dir(modulename)
... чтобы просто получить список имен всех функций и переменных, определенных в модуле.
Ваш код на Python выполняет следующую задачу: он печатает список всех функций, определенных в модуле yourmodule
. Давайте разберем его по частям.
- Импортируются необходимые модули:
types
, который предоставляет доступ к типам данных в Python, и ваш пользовательский модульyourmodule
. - Используется list comprehension для создания списка, который включает функции из
yourmodule
. dir(yourmodule)
возвращает список всех атрибутов модуляyourmodule
, включая функции, классы и переменные.getattr(yourmodule, a)
извлекает атрибут с именемa
из модуляyourmodule
.isinstance(getattr(yourmodule, a), types.FunctionType)
проверяет, является ли этот атрибут функцией.- В конце, весь список функций передается в
print()
, чтобы вывести его на экран.
Таким образом, если вы хотите получить и вывести все функции из модуля, ваш код корректен. Вот он в более структурированном виде:
import types
import yourmodule
# Получаем и выводим список всех функций в yourmodule
functions_list = [getattr(yourmodule, a) for a in dir(yourmodule)
if isinstance(getattr(yourmodule, a), types.FunctionType)]
print(functions_list)
Этот код поможет вам увидеть все функции модуля yourmodule
. Если у вас возникнут дополнительные вопросы, не стесняйтесь их задавать!
Это сработает:
dir(module)
Однако, если вам неудобно читать возвращаемый список, просто используйте следующий цикл, чтобы выводить имена по одному в строке:
for i in dir(module): print(i)
Если вы не можете импортировать указанный файл Python из-за ошибок импорта, то ни одно из приведенных выше решений не сработает. У меня возникла такая ситуация, когда я пытался проанализировать файл из большой кодовой базы с множеством зависимостей. В этом случае можно обработать файл как текст и найти все имена методов, начинающиеся с "def", с выводом их номеров строк.
Вот пример кода:
import re
pattern = re.compile("def (.*)\(")
for i, line in enumerate(open('Example.py')):
for match in re.finditer(pattern, line):
print('%s: %s' % (i + 1, match.groups()[0]))
Этот код открывает файл Example.py
, ищет строки, содержащие метод, и выводит имя метода вместе с номером строки, в которой он находится.
Вызов функции модуля по его имени (строке)
Импорт модулей из родительской папки
Как получить путь к модулю?
Как найти местоположение исходников модуля Python?
Как сослаться на пакет Python, если в имени файла есть точка?