, если каталог содержит несколько файлов .py say, a.py, b.py, c.py Как я могу получить все имя модуля и их название класса и в конечном итоге все имена методов соответствующего класса, contaned в этом каталогеПолучение имени модуля, имени класса и имени метода из каталога в python
ответ
для фильтрации файлов в директории, которую вы можете использовать («» относится к текущему каталогу):
from os import listdir,chdir
default_path = r'c:\dev\python'
modules = [ fl for fl in listdir(default_path) if fl.endswith('.py') ]
Чтобы узнать, какие классы и методы я знаю, вы можете использовать проверку, хотя вы не можете использовать ее без импорта модуля:
, например.
from inspect import getmembers, isfunction, ismethod, isclass
your_module = __import__(modules[0].split('.')[0])
class_funcs = {}
funcs = [ obj for obj in getmembers(your_module) if isfunction(obj[1]) ]
classes = [ obj for obj in getmembers(your_module) if isclass(obj[1]) ]
for cls in classes:
class_funcs[cls[0]] = [ obj for obj in getmembers(cls[1]) if ismethod(obj[1]) ]
print funcs
[('function1', <function your_module.function1>),
('function2', <function your_module.function2>)]
print class_funcs
{'ClassName': [('__init__', <unbound method ClassName.__init__>),
('Method_name', <unbound method ClassName.Method_name>)]}
Это даст вам все функции, классы, методы классов в вашем модуле.
Если вы не хотите импортировать модуль, я не знаком с способом получения методов (кроме чтения файла и использования регулярных выражений и т. Д.).
Могу ли я использовать имя модуля, полученное с использованием первого метода, который вы упомянули, а затем использовать его в 2-й метод для получения имен функций? – Mike786
Вы можете. Импортируйте модуль в первую часть следующим образом: module = __import __ ('file') – equinox93
поэтому, когда я делаю это, он говорит об ошибке импорта: нет модуля с именем Module_name – Mike786
Если вы не хотите импортировать модули, вы можете использовать AST для их проверки.
import ast
import _ast
def inspect_module(module_path):
with open(module_path) as mf:
tree = ast.parse(mf.read())
module_classes = [_ for _ in tree.body if isinstance(_, _ast.ClassDef)]
module_classes = [(c.name, [_.name for _ in c.body if isinstance(_, _ast.FunctionDef)]) for c in module_classes]
return module_classes
Он возвращает список, содержащий кортеж имени класса и список имен функций. К сожалению, это не работает для неработающих функций. Его можно легко расширить, чтобы дать вам все аргументы для функций.
- 1. Получение имени каталога из имени файла
- 2. Получение имени модуля от имени модели
- 3. Получение текущего имени модуля
- 4. Получение имени вызывающего метода
- 5. получение имени и имени объекта
- 6. Очистка имени каталога (Удаление «..» и «.» Из имени каталога)
- 7. Получение имени метода из выражения
- 8. Получение имени каталога в java
- 9. Настройка имени модуля, отличного от имени каталога в SwiftPM
- 10. Получение имени класса из экземпляра
- 11. Получение имени модуля в MVVM
- 12. Динамическое получение имени текущего метода
- 13. Получение имени объявляющего класса?
- 14. Получение класса по имени
- 15. Получение имени переменной в Python?
- 16. Производительность Влияние имени класса журнала, имени метода и номера строки
- 17. Получение имени или идентификации модуля
- 18. получение имени класса исключения в python?
- 19. Получение текста из элементов без имени или имени класса
- 20. Node.js Получение имени модуля из экземпляра
- 21. Получение значений из модуля по имени?
- 22. Передача имени каталога из sys.argv в python
- 23. Получение имени класса в C++
- 24. Получение имени схемы и имени таблицы сразу
- 25. Получение имени класса из общего статического метода в Java
- 26. Получение имени из класса R в android
- 27. Windows Phone Linq2Twitter - получение имени, имени и имени авторизованного пользователя?
- 28. Получение исходного имени переменной из метода расширения
- 29. Получение имени подкласса из суперкласса
- 30. Ошибка метода - получение имени из таблицы
См. ['Inspect'] (https://docs.python.org/2/library/inspect.html) –