4

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__其他一些完全不相关的对象中。我更喜欢感觉更强大的解决方案。

4

2 回答 2

14

您可以使用inspect.ismodule

>>> import inspect
>>> import os
>>> os2 = object()
>>> inspect.ismodule(os)
True
>>> inspect.ismodule(os2)
False
于 2013-06-11T17:06:03.830 回答
12

你可以做:

from types import ModuleType
print isinstance(obj, ModuleType)
于 2013-06-11T17:06:25.857 回答