2013-06-11 3 views
3

Модули 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__ в некоторые другие, абсолютно несвязанные объекты. Я бы предпочел решение, которое выглядит немного более надежным.

ответ

9

Вы можете использовать inspect.ismodule:

>>> import inspect 
>>> import os 
>>> os2 = object() 
>>> inspect.ismodule(os) 
True 
>>> inspect.ismodule(os2) 
False 
9

Вы можете сделать:

from types import ModuleType 
print isinstance(obj, ModuleType) 
+1

Это точно, как 'определяется inspect.ismodule'. – Blender

+0

Спасибо, ребята! Оба решения потрясающие! – hemflit

Смежные вопросы