获取模块名称:x .__ module__ vs x .__ class __.__ module__

时间:2011-03-11 09:25:37

标签: python module python-module

我想获取Python对象所来自的模块。两个

x.__module__

x.__class__.__module__

似乎有效。这些完全是多余的吗?是否有理由更喜欢一个而不是另一个?

1 个答案:

答案 0 :(得分:11)

如果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__可能会产生误导。