Python check if isinstance any type in list?

D Adams picture D Adams · Oct 23, 2015 · Viewed 38.5k times · Source

How do I pythonicly do:

var = 7.0
var_is_good = isinstance(var, classinfo1) or isinstance(var, classinfo2) or isinstance(var, classinfo3) or ... or  isinstance(var, classinfoN)

It seems silly I can't just pass in a list of classinfo's:

var_is_good = isinstanceofany( var, [classinfo1, classinfo2, ... , classinfoN] )

So what is the isinstanceofany function?

Answer

Martijn Pieters picture Martijn Pieters · Oct 23, 2015

isinstance() takes a tuple of classes for the second argument. It'll return true if the first argument is an instance of any of the types in that sequence:

isinstance(var, (classinfo1, classinfo2, classinfo3))

In other words, isinstance() already offers this functionality, out of the box.

From the isinstance() documentation:

If classinfo is neither a class object nor a type object, it may be a tuple of class or type objects, or may recursively contain other such tuples (other sequence types are not accepted).

Emphasis mine; note the recursive nature; (classinfo1, (classinfo2, classinfo3)) is also a valid option.