python - 如何测试 Python 对象是否是模块?

标签 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”只是我发明的一个名称,我无法在文档中找到是否确实存在类似的名称以及它的名称。

有这样的类(class)吗?我错过了文档中的某个地方吗?

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

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

这听起来像 hasattr(obj, '__package__') ( PEP 366 ) 是一个可能的权宜之计,但是 AFAICT 没有特别的理由可以确定 future 的更新不会把 __package__ 到其他一些完全不相关的对象中。我更喜欢感觉更强大的解决方案。

最佳答案

您可以使用 inspect.ismodule :

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

关于python - 如何测试 Python 对象是否是模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17049806/

相关文章:

python - 使用简单的 PyQT UI 选择目录路径粉碎

python - 如何在 django 中的 python 脚本中接收表单输入?

python - 基于列值和变量合成一个 numpy 数组/矩阵?

python - 在 Python 中测试变量类型

python - 格式化 self,这是一个字典

python - 如何访问theano.tensor.var.TensorVariable?

python - ipywidgets 按钮上的自定义文本位置

python - pip 安装失败 SSL : CERTIFICATE_VERIFY_FAILED on windows

python - 无法使用 python 在 pi 上安装 Bower 未找到兼容版本 : bower

python - 从 Vivino 抓取 "Compare Vintages"