Si x
est une classe alors x.__module__
et x.__class__.__module__
vous donnera des choses différentes:
# (Python 3 sample; use 'class Example(object): pass' for Python 2)
>>> class Example: pass
>>> Example.__module__
'__main__'
>>> Example.__class__.__module__
'builtins'
Pour une instance qui ne définit pas __module__
directement l'attribut de la classe est utilisé à la place.
>>> Example().__module__
'__main__'
Je pense que vous devez être clair quel module vous voulez vraiment connaître. Si c'est le module contenant la définition de la classe, alors il est préférable d'être explicite à ce sujet, donc j'utiliserais x.__class__.__module__
. Les instances n'enregistrent généralement pas le module où elles ont été créées, donc x.__module__
peut être trompeur.