1) class instances have an attribute called __class__, that holds (surprise, surprise) the class object. type(obj) will also return the class of an object.

2) class objects have an attribute __bases__, that holds a tuple of the classes they are derived from. However if you just want to test whether a class is derived from a particular base class then it is better to use the isinstance or issubclass functions.

3) new-style classed (derived from object) have an undocumented method __subclasses__ that returns a tuple of the classes DERIVED from the class. This is used internally by Python, and since it is not documented may go away in future versions. It is still occasionally useful for things like debugging and exploring third-party libraries.