If you want the name of the class, ask for its name, not its string representation. Generally speaking, the string representation should tell you what sort of object it is (either explicitly or implicitly), not just its value.
I agree with this rather generally. I'd also like access to the class name, but I don't really like that implementation yet.
A thought: Could this be reframed as a tweak to the reporting of type objects, specifically? If the __repr__ function of a type object returned the desired class information, it seems like it would solve this issue.
Currently, print str(type(variable)) # returns a string in the form of #"'module reference and class name' type.__name__ at address" print repr(type(variable)) # returns the same string. print type(variable).__name__ # returns "instance" for any user variable instances.
However, if we altered repr to return the qualified name, we'd be pretty much set, as we already have the __name__ variable in type objects* and the __str__ can remain untouched. That would make the information rather easily accessed and without special parsing.
(*I'd prefer a short statement to extract that name, too. I could work with "print class(variable)" if the parser could. Other options off the top o' my noggin: "type.name(variable)" or "variable.__name__" where the .__name_ is automatically supplied. (allow overwriting in the class definition?))