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
To check if
o is an instance of
str or any subclass of
str, use isinstance (this would be the "canonical" way):
if isinstance(o, str):
To check if the type of
o is exactly
str (exclude subclasses):
if type(o) is str:
The following also works, and can be useful in some cases:
if issubclass(type(o), str):
See Built-in Functions in the Python Library Reference for relevant information.
One more note: in this case, if you're using python 2, you may actually want to use:
if isinstance(o, basestring):
because this will also catch Unicode strings (
unicode is not a subclass of
unicode are subclasses of
basestring). Note that
basestring no longer exists in python 3, where there's a strict separation of strings (
str) and binary data (
isinstance accepts a tuple of classes. This will return True if x is an instance of any subclass of any of (str, unicode):
if isinstance(o, (str, unicode)):
The most Pythonic way to check the type of an object is... not to check it.
Since Python encourages Duck Typing, you should just
try...except to use the object's methods the way you want to use them. So if your function is looking for a writable file object, don't check that it's a subclass of
file, just try to use its
Of course, sometimes these nice abstractions break down and
isinstance(obj, cls) is what you need. But use sparingly.