Python verifica si hay algún tipo en la lista?

¿Cómo hago pythonicly?

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

Parece tonto, no puedo simplemente pasar una lista de información de clase:

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

Entonces, ¿cuál es la función isinstanceofany ?

isinstance() toma una tupla de clases para el segundo argumento. Devolverá verdadero si el primer argumento es una instancia de cualquiera de los tipos en esa secuencia:

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

En otras palabras, isinstance() ya ofrece esta funcionalidad, fuera de la caja.

De la documentación de isinstance() :

Si classinfo no es ni un objeto de clase ni un objeto de tipo, puede ser una tupla de objetos de clase o de tipo, o puede contener recursivamente otras tuplas similares (no se aceptan otros tipos de secuencia).

Énfasis mío; Note la naturaleza recursiva; (classinfo1, (classinfo2, classinfo3)) también es una opción válida.

Estabas bastante cerca con el título de tu pregunta ya. Podrías usar any y una lista:

 var = 7.0 var_is_good = any([isinstance(var, classinfo1), isinstance(var, classinfo2), isinstance(var, classinfo3), ... isinstance(var, classinfoN)]) 

Pero mirando en los documentos de isinstance revela:

Devuelva verdadero si el argumento del objeto es una instancia del argumento classinfo o de una subclase (directa, indirecta o virtual) del mismo. Si el objeto no es un objeto del tipo dado, la función siempre devuelve falso. Si classinfo no es una clase (objeto de tipo), puede ser una tupla de objetos de tipo , o puede contener recursivamente otras tuplas de este tipo (no se aceptan otros tipos de secuencia). Si classinfo no es un tipo o una tupla de tipos y dichas tuplas, se genera una excepción TypeError.

Esto significa que la mejor manera de hacerlo es

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

Esto resolverá tu problema:

 valid_instance_types =  var_is_good = isinstance(var, valid_instance_types) 

Según la documentación, hay muchas formas en que puede pasar valores de tipos a su isinstance .

También puede considerar voluptuoso si está tratando de hacer una validación más complicada de la que esto es solo una parte.

Por lo general, no debería usar isinstance , pero lo que quiere hacer se puede lograr con la función any () incorporada.

 var_is_good = any(isinstance(var, t) for t in [type1, type2, type3])