Friday, 23 December 2016

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?


Answer



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 str; both str and 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 (bytes).



Alternatively, 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)):

No comments:

Post a Comment

c++ - Does curly brackets matter for empty constructor?

Those brackets declare an empty, inline constructor. In that case, with them, the constructor does exist, it merely does nothing more than t...