У меня установлен модуль Python в моей системе, и я хотел бы видеть, какие функции / классы / методы доступны в нем.
Я хочу, чтобы вызвать функцию док на каждом. В ruby я могу сделать что-то вроде ClassName.methods, чтобы получить список всех методов, доступных в этом классе. Есть ли что-то подобное в питоне?
например. что-то вроде:
from somemodule import foo
print foo.methods # or whatever is the correct method to call
python
reflection
module
inspect
Крис Гоу
источник
источник
Ответы:
inspect
Модуль. Также см.pydoc
Модуль,help()
функцию в интерактивном интерпретаторе иpydoc
инструмент командной строки, который генерирует необходимую документацию. Вы можете просто дать им класс, который вы хотите увидеть в документации. Они также могут генерировать, например, вывод HTML и записывать его на диск.источник
ast
модуля в определенных ситуациях .dir
для возврата функций и переменных; использовать толькоinspect
для фильтрации функций; и использоватьast
для анализа без импорта.Вы можете использовать,
dir(module)
чтобы увидеть все доступные методы / атрибуты. Также проверьте PyDocs.источник
dir()
функции «попытки получить самую актуальную, а не полную, информацию». Источник: docs.python.org/library/functions.html#dir .inspect
.После того, как вы отредактировали
import
модуль, вы можете просто сделать:... Чтобы получить документы на все функции одновременно, в интерактивном режиме. Или вы можете использовать:
... Чтобы просто перечислить имена всех функций и переменных, определенных в модуле.
источник
inspect
модуль может также перечислять переменные, хотя здесь явно не запрашивается. Это решение требует только встроенных объектов, что может быть очень полезно в некоторых случаях, когда Python установлен в ограниченной / заблокированной / сломанной среде.dir
что напечатает результаты, однако, похоже, что вам нужно сделатьprint(dir(modulename))
.Пример с проверкой:
getmembers возвращает список кортежей (object_name, object_type).
Вы можете заменить функцию isfunction любой другой функцией isXXX в модуле проверки.
источник
getmembers
можно использовать предикат, поэтому ваш пример также может быть записан:functions_list = [o for o in getmembers(my_module, isfunction)]
functions_list = getmembers(my_module, predicate)
потому что это уже возвращает список;)источник
Для полноты картины я хотел бы отметить, что иногда вы можете захотеть разобрать код, а не импортировать его.
import
Будет выполнять выражения верхнего уровня, и это может быть проблемой.Например, я позволяю пользователям выбирать функции точки входа для пакетов, создаваемых с помощью zipapp . Использование
import
иinspect
риск запуска ошибочного кода, приводящего к сбоям, выводу справочных сообщений, появлению диалоговых окон GUI и так далее.Вместо этого я использую модуль ast, чтобы перечислить все функции верхнего уровня:
Поместив этот код
list.py
и используя себя в качестве ввода, я получаю:Конечно, навигация по AST иногда бывает сложной, даже для относительно простого языка, такого как Python, потому что AST довольно низкоуровневый. Но если у вас есть простой и понятный вариант использования, он выполним и безопасен.
Однако недостатком является то, что вы не можете обнаружить функции, которые генерируются во время выполнения, например
foo = lambda x,y: x*y
.источник
__version__
т. Д.). Есть ли способ получить это?Для кода, который вы не хотите анализировать, я рекомендую основанный на AST подход @csl выше.
В остальном модуль проверки корректен:
Это дает список из 2-х кортежей в форме
[(<name:str>, <value:function>), ...]
.Простой ответ выше намекается в различных ответах и комментариях, но не вызывается явно.
источник
Это сделает свое дело:
Однако, если вам неудобно читать возвращенный список, просто используйте следующий цикл, чтобы получить по одному имени в строке.
источник
inspect
. Кроме того, как это отличается от ответа @ DanLenski?dir(module)
это стандартный способ при использовании сценария или стандартного интерпретатора, как упоминалось в большинстве ответов.Однако с интерактивной оболочкой Python, такой как IPython, вы можете использовать табуляцию, чтобы получить обзор всех объектов, определенных в модуле. Это гораздо удобнее, чем использовать скрипт и
print
посмотреть, что определено в модуле.module.<tab>
покажет вам все объекты, определенные в модуле (функции, классы и т. д.)module.ClassX.<tab>
покажет вам методы и атрибуты классаmodule.function_xy?
илиmodule.ClassX.method_xy?
покажет вам строку документации этой функции / методаmodule.function_x??
илиmodule.SomeClass.method_xy??
покажет вам исходный код функции / метода.источник
Для глобальных функций
dir()
это команда для использования (как упоминалось в большинстве этих ответов), однако в этом списке перечислены как публичные функции, так и непубличные функции.Например работает:
Возвращает функции / классы, такие как:
Некоторые из них, как правило, не предназначены для общего использования в программировании (но самим модулем, за исключением случая с DunderAliases, например
__doc__
,__file__
ect). По этой причине может быть бесполезно перечислять их с общедоступными (именно так Python знает, что получить при использованииfrom module import *
).__all__
может быть использован для решения этой проблемы, он возвращает список всех открытых функций и классов в модуле (те, которые не начинаются с подчеркивания -_
). См. Кто-нибудь может объяснить __all__ в Python? для использования__all__
.Вот пример:
Все функции и классы с подчеркиванием были удалены, оставив только те, которые определены как публичные и поэтому могут использоваться через
import *
.Обратите внимание, что
__all__
это не всегда определяется. Если он не включен, тоAttributeError
поднимается.Случай этого с модулем ast:
источник
Ни один из этих ответов не будет работать, если вы не можете импортировать указанный файл Python без ошибок импорта. Это было так для меня, когда я проверял файл, полученный из большой базы кода с большим количеством зависимостей. Следующее будет обрабатывать файл как текст и искать все имена методов, начинающиеся с «def», и печатать их и номера строк.
источник
ast
модуль. Смотрите мой ответ для примера.Кроме dir (module) или help (module), упомянутых в предыдущих ответах, вы также можете попробовать:
- открыть ipython
- import имя_модуля
- ввести имя_модуля, нажать tab. Откроется небольшое окно со списком всех функций в модуле python.
Это выглядит очень аккуратно.
Вот фрагмент списка всех функций модуля hashlib
источник
Это добавит все функции, которые определены в your_module в список.
источник
unit8_conversion_methods
? Это просто пример имени модуля?[getattr(your_module, func) for func in dir(your_module) if type(getattr(your_module, func)).__name__ == "function"]
Вы можете использовать следующий метод, чтобы получить список всех функций вашего модуля из оболочки:
import module
источник
источник
Вывод :
источник