variable type python3 python types isinstance

python3 - type python



Python verifica si hay algĂșn tipo en la lista? (4)

Esto resolverá tu problema:

valid_instance_types = <tuple of types you want to allow> var_is_good = isinstance(var, valid_instance_types)

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

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

¿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 en una lista de información de clase:

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

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


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])


Ya estabas bastante cerca del título de tu pregunta. 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))


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 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.