Voici l'une basée sur Greg Bacon excellente réponse, mais avec un couple de contrôles supplémentaires:
__module__
peut None
(selon les docs), et aussi pour un type comme str
il peut être __builtin__
(ce que vous ne voulez apparaître dans les journaux ou quoi que ce soit). Les vérifications suivantes pour ces deux possibilités:
def fullname(o):
module = o.__class__.__module__
if module is None or module == str.__class__.__module__:
return o.__class__.__name__
return module + '.' + o.__class__.__name__
(Il pourrait y avoir une meilleure façon de vérifier __builtin__
. Le ci-dessus ne s'appuie sur le fait que la str est toujours disponible, et son module est toujours __builtin__
)