获取模块名:x.__module__ 与 x.__class__.__module__

7 投票
1 回答
7787 浏览
提问于 2025-04-16 13:29

我想知道一个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__ 可能会让人误解。

撰写回答