2013-06-11 175 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

相關問題