¿Cómo lo hago pitónicamente?
var = 7.0
var_is_good = isinstance(var, classinfo1) or isinstance(var, classinfo2) or isinstance(var, classinfo3) or ... or isinstance(var, classinfoN)
Parece una tontería no puedo simplemente pasar una lista de información de clase:
var_is_good = isinstanceofany( var, [classinfo1, classinfo2, ... , classinfoN] )
Entonces, ¿cuál es la isinstanceofanyfunción?
python
types
isinstance
D Adams
fuente
fuente

numberO devuelve una expresión sympy)). Quiero comprobar que la función que generé hace lo que se supone que debe hacer cuando la paso a otras funciones.Respuestas:
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:En otras palabras,
isinstance()ya ofrece esta funcionalidad, lista para usar.De la
isinstance()documentación :Énfasis mío; tenga en cuenta la naturaleza recursiva;
(classinfo1, (classinfo2, classinfo3))también es una opción válida.fuente
Ya estabas bastante cerca del título de tu pregunta. Podrías usar
anyy 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
isinstancerevela:Esto significa que la mejor manera de hacerlo es
var = 7.0 var_is_good = isinstance(var, (classinfo1, classinfo2, classinfo3, ..., classinfoN))fuente
isinstancecon solo elclassinfocambio no me parece muy Pythonic.var.__class__. ¿Es eso lo que quieres? @Makoto: Estoy de acuerdo. ¡No es Pythonic en absoluto!any()con una lista es ... inútil. Use una expresión generadora si debe usarany(), entonces al menos obtendrá el beneficio de la salida anticipada.isinstancetupla with es el camino a seguir. Solo quería mencionar la solución,anyya que parecía ser lo que estaba pidiendo en el título.Esto resolverá tu problema:
Según la documentación, hay muchas formas de pasar valores de tipos
isinstance.También puede parecer voluptuoso si está tratando de hacer una validación más complicada de la cual esto es solo una parte.
fuente
Por lo general, no debería usarlo
isinstance, pero lo que desea hacer se puede lograr con la función incorporada any () .var_is_good = any(isinstance(var, t) for t in [type1, type2, type3])fuente
isinstance()ofrece la funcionalidad lista para usar sin usarany().isinstance()es irrelevante.isinstance(). Gracias.