Improve name_that_thing to handle instance methods

This commit is contained in:
Andrew Godwin 2016-03-20 11:15:51 -03:00
parent c58db806b6
commit 2732a66e81

View File

@ -5,12 +5,17 @@ def name_that_thing(thing):
""" """
Returns either the function/class path or just the object's repr Returns either the function/class path or just the object's repr
""" """
# Instance method
if hasattr(thing, "im_class"):
return name_that_thing(thing.im_class) + "." + thing.im_func.func_name
# Other named thing
if hasattr(thing, "__name__"): if hasattr(thing, "__name__"):
if hasattr(thing, "__class__") and not isinstance(thing, types.FunctionType): if hasattr(thing, "__class__") and not isinstance(thing, types.FunctionType):
if thing.__class__ is not type: if thing.__class__ is not type:
return name_that_thing(thing.__class__) return name_that_thing(thing.__class__)
if hasattr(thing, "__module__"): if hasattr(thing, "__module__"):
return "%s.%s" % (thing.__module__, thing.__name__) return "%s.%s" % (thing.__module__, thing.__name__)
# Generic instance of a class
if hasattr(thing, "__class__"): if hasattr(thing, "__class__"):
return name_that_thing(thing.__class__) return name_that_thing(thing.__class__)
return repr(thing) return repr(thing)