Если 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__
может вводить в заблуждение.