如何测试Python对象是否是一个模块?

hem*_*lit 3 python

Python模块也是对象.所以我想可以通过这种方式测试给定对象是否是模块(/ package):

>>> import sys, os, my_module
>>> isinstance(sys, ModuleClass)
True
>>> isinstance(os, ModuleClass)
True
>>> isinstance(my_module, ModuleClass)
True
>>> isinstance(5, ModuleClass)
False
Run Code Online (Sandbox Code Playgroud)

除了"ModuleClass"只是我发明的一个名字,我在文档中找不到它是否真的存在以及它叫什么.

是否有这样的课程?它是在我错过的文档中的某个地方吗?

如果没有,是否有另一种方法来查看对象是否是一个模块?如果它与实现无关,那就更好了.

(我正在使用Python 2.7,但我想知道3.x是否有一些新解决方案也很有趣.)

听起来像hasattr(obj, '__package__')(PEP 366)是一种可能的权宜之计,但是AFAICT并没有特别的理由确信未来的某些更新不会放入__package__其他一些完全不相关的对象中.我更喜欢一种感觉更强大的解决方案.

Ble*_*der 11

你可以使用inspect.ismodule:

>>> import inspect
>>> import os
>>> os2 = object()
>>> inspect.ismodule(os)
True
>>> inspect.ismodule(os2)
False
Run Code Online (Sandbox Code Playgroud)


kar*_*ikr 11

你可以做:

from types import ModuleType
print isinstance(obj, ModuleType)
Run Code Online (Sandbox Code Playgroud)

  • 这正是“inspect.ismodule”的定义方式。 (3认同)