PyQuiz 39 – isinstance con herencia en Python

El reto
class Animal:
pass
class Gato(Animal):
pass
g = Gato()
print(isinstance(g, Animal))¿Cuál es el resultado?
- a) True
- b) False
- c) Error
Piensa tu respuesta antes de seguir leyendo…
Concepto: isinstance con herencia
La función isinstance(objeto, clase) verifica si un objeto es instancia de una clase determinada. A diferencia de comparar con type(objeto) == clase, isinstance también devuelve True para instancias de subclases, respetando la jerarquía de herencia.
En el ejemplo, Gato hereda de Animal. Un objeto Gato es simultáneamente instancia de Gato y de Animal (y de object, la clase base de todo en Python). Esto refleja la relación «es un» (is-a) de la programación orientada a objetos.
class Animal: pass
class Gato(Animal): pass
g = Gato()
print(isinstance(g, Gato)) # True
print(isinstance(g, Animal)) # True — herencia
print(type(g) == Animal) # False — type() no considera herenciaPaso a paso
class Animal: pass— Se define la clase baseAnimal.class Gato(Animal): pass— Se defineGatoque hereda deAnimal.Gatoes una subclase deAnimal.g = Gato()— Se crea una instancia deGato. Este objeto pertenece directamente a la claseGatoy, por herencia, también aAnimal.isinstance(g, Animal)— Python recorre la jerarquía de herencia deg:Gato → Animal → object. EncuentraAnimalen la cadena, así que devuelveTrue.print(isinstance(g, Animal))— Se imprimeTrue.
📥 Llévate el cheatsheet de Python (gratis)
PDF de 6 páginas con lo esencial: tipos, condicionales, bucles, estructuras de datos, funciones y los errores que más vas a cometer. Para tener al lado mientras programas.
Sin spam. Te apuntas a la lista, descargas el cheatsheet y recibes contenido de Python cada semana.
Solución
Respuesta correcta: A) True
Gato hereda de Animal. isinstance() también comprueba clases padre. g es instancia de Animal.
Sabías que…
isinstance acepta una tupla de clases como segundo argumento para verificar contra múltiples tipos a la vez:
valor = 42
print(isinstance(valor, (int, float))) # True — es int
print(isinstance(valor, (str, list))) # False
# Muy útil para validar tipos en funciones:
def procesar(dato):
if not isinstance(dato, (int, float)):
raise TypeError(f'Se esperaba número, recibí {type(dato).__name__}')
return dato * 2
# isinstance vs type:
print(type(True) == int) # False
print(isinstance(True, int)) # True — bool es subclase de intPrueba tú mismo
Si tienes class B(A): pass y class C(B): pass, ¿qué devuelve isinstance(C(), A)? ¿Y isinstance(A(), C)?
Más PyQuizzes en elpythonista.com/pyquizzes
Tutorial relacionado: Tutorial de Python
¿Quieres aprender Python en orden, no a saltos?
Esto que has leído es solo una pieza. En El Pythonista lo verás todo encadenado: 11 módulos, 37+ horas de vídeo, 734 actividades y un proyecto real (MovieTracker) que crece contigo desde la primera variable hasta el deploy a producción.
37+ horas · 734 actividades · Proyecto real · Acceso de por vida · 14 días de garantía
