我想获取Python对象所来自的模块。两个
x.__module__
和
x.__class__.__module__
似乎有效。这些完全是多余的吗?是否有理由更喜欢一个而不是另一个?
答案 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__
可能会产生误导。