<s>[INST] What's the canonical way to check for type in python? What is the best way to check whether a given object is of a given type? How about checking whether the object inherits from a given type?
Let's say I have an object o. How do I check whether it's a str?
 [/INST] To check if the type of o is exactly str:
type(o) is str

To check if o is an instance of str or any subclass of str (this would be the "canonical" way):
isinstance(o, str)

The following also works, and can be useful in some cases:
issubclass(type(o), str)
type(o) in ([str] + str.__subclasses__())

See Built-in Functions in the Python Library Reference for relevant information.
One more note: in this case, you may actually want to use:
isinstance(o, basestring)

because this will also catch Unicode strings (unicode is not a subclass of str; both str and unicode are subclasses of basestring).
Alternatively, isinstance accepts a tuple of classes. This will return True if x is an instance of any subclass of any of (str, unicode):
isinstance(o, (str, unicode))

 </s>