Very small nitpick: the square brackets are unnecessary.  As shown, they will create a list of booleans, *then* the list will be passed to `all`.  If the square brackets are removed, it will instead be a generator expression; `all` will iterate through the generator until it hits its first `False`, allowing the remaining `isinstance` checks to be skipped.  So, dropping the square brackets would allow failures to be caught a tiny bit faster and to use a tiny bit less memory in the process.

Obviously, it hardly matters how fast it can fail, so change that if you feel like it, but if you don't feel like it, it's fine as-is.  Otherwise, +1 to this PR.