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

Joo*_*kka 5 python module python-module

我想获取Python对象所来自的模块.都

x.__module__
Run Code Online (Sandbox Code Playgroud)

x.__class__.__module__
Run Code Online (Sandbox Code Playgroud)

似乎工作.这些完全是多余的吗?是否有理由偏爱另一个?

Dun*_*can 12

如果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'
Run Code Online (Sandbox Code Playgroud)

对于未__module__直接定义的实例,将使用该类中的属性.

>>> Example().__module__
'__main__'
Run Code Online (Sandbox Code Playgroud)

我想你需要明确你真正想知道的模块.如果它是包含类定义的模块,那么最好是明确的,所以我会使用x.__class__.__module__.实例通常不会记录模块的创建位置,因此x.__module__可能会产生误导.