Модули Python также являются объектами. Таким образом, я предположил бы, что это может быть возможным, чтобы проверить, если данный объект представляет собой модуль (/ пакет) таким образом:Как проверить, является ли объект Python модулем?
>>> import sys, os, my_module
>>> isinstance(sys, ModuleClass)
True
>>> isinstance(os, ModuleClass)
True
>>> isinstance(my_module, ModuleClass)
True
>>> isinstance(5, ModuleClass)
False
За исключением «ModuleClass» это просто имя, которое я придумал, и я не могу найти в документации если что-то вроде этого действительно существует и что оно называется.
Есть ли такой класс вообще? Это где-то в документах, которые я пропустил?
Если нет, есть ли другой способ увидеть, является ли объект модулем? Еще лучше, если это реализация - агностик.
(Я использую Python 2.7, но я предполагаю, что это также будет интересно узнать, если 3.x имеет некоторое новое решение.)
Это звучит как hasattr(obj, '__package__')
(PEP 366) возможная временная мера, но AFAICT нет никакой особой причины, чтобы убедиться, что какое-то будущее обновление не поместит __package__
в некоторые другие, абсолютно несвязанные объекты. Я бы предпочел решение, которое выглядит немного более надежным.
Это точно, как 'определяется inspect.ismodule'. – Blender
Спасибо, ребята! Оба решения потрясающие! – hemflit