获取模块名:x.__module__ 与 x.__class__.__module__
我想知道一个Python对象是来自哪个模块。上面的
x.__module__
和
x.__class__.__module__
看起来都可以用。它们是不是完全一样的?有没有什么理由让我选择其中一个而不是另一个?
1 个回答
14
如果 x
是一个类,那么 x.__module__
和 x.__class__.__module__
返回的内容是不同的:
# (Python 3 sample; use 'class Example(object): pass' for Python 2)
>>> class Example: pass
>>> Example.__module__
'__main__'
>>> Example.__class__.__module__
'builtins'
对于一个没有直接定义 __module__
的实例,它会使用类中的这个属性。
>>> Example().__module__
'__main__'
我觉得你需要搞清楚你想了解哪个模块。如果你想知道包含类定义的模块,最好明确指出,所以我会使用 x.__class__.__module__
。实例通常不会记录它们被创建时所在的模块,因此 x.__module__
可能会让人误解。