У меня есть следующий код:
if __name__ == '__main__':
module_name = sys.argv[1]
is_lite = sys.argv[2]
importlib.import_module(module_name)
for name, class_object in inspect.getmembers(sys.modules[module_name]):
if inspect.isclass(class_object) and not inspect.isabstract(class_object):
try:
print "\n\n\n"
print "Executing: "
print class_object
print "\n\n\n"
instance = class_object()
instance.execute(is_lite)
except:
pass
Все объекты, которые будут созданы, на самом деле являются подклассами класса с именем: Foo, который является абстрактным.
Возвращаемые функцией inspect класс_объекты содержат ВСЕ классы, содержащиеся в модуле, это означает, что импорт также присутствует в списке, а импорт не является подклассом Foo.
class_object
То, что я ищу, это просто метод получения следующей информации:
is (class_object, Foo)
Это позволило бы мне избавиться от ловушки try и получить более логичный и надежный код.
Но пока я ничего не нашел, кажется, нет простого способа извлечь информацию, содержащуюся в модулях, возвращаемых платформой inspect.
Я также пытался использовать встроенный метод issubclass, но он ошибочен, вероятно, потому, что class_object не является экземпляром класса, а просто его описателем: class_object является экземпляром abc.ABCMeta, а не Foo, но будет содержать всю информацию о Фу.
Спасибо за помощь.