Используйте модуль inspect для получения имени унаследованного объекта - PullRequest
1 голос
/ 21 июня 2019

Я хочу посмотреть на файл, получить имена классов и проверить, наследуется ли имя «Runconfig». Так что если файл имеет

class some_function(RunConfig):

Я хочу вернуть истину. Мой код выглядит так прямо сейчас:

for file in list_of_files:
   if file in ['some_file.py']:
       for name,obj in inspect.getmembers(file):
          if inspect.isclass(obj):
             print("NAME",name,"obj",obj)

Это возвращает объекты, но я не вижу ничего, что говорит 'RunConfig' на нем. Что мне здесь не хватает? Заранее большое спасибо!

1 Ответ

1 голос
/ 21 июня 2019

Вы можете сделать что-то вроде:

import importlib
import inspect

def is_class_inherited_in_file(file_name, class_ref):
    module = importlib.import_module(file_name.split('.')[0])
    module_members = inspect.getmembers(module)
    for member in module_members:
        if type(member[1]) == type and issubclass(member[1], class_ref):
            return True
    return False

>>> is_class_inherited_in_file('some_file.py', RunConfig)
True

Предположение: имя файла находится в рабочем каталоге.Если вы хотите импортировать из любого каталога, то сделайте что-то вроде: Как импортировать модуль по полному пути?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...