PyQuiz 39 - isinstance con herencia en Python | Quiz interactivo

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 herencia

Paso a paso

  1. class Animal: pass — Se define la clase base Animal.
  2. class Gato(Animal): pass — Se define Gato que hereda de Animal. Gato es una subclase de Animal.
  3. g = Gato() — Se crea una instancia de Gato. Este objeto pertenece directamente a la clase Gato y, por herencia, también a Animal.
  4. isinstance(g, Animal) — Python recorre la jerarquía de herencia de g: Gato → Animal → object. Encuentra Animal en la cadena, así que devuelve True.
  5. print(isinstance(g, Animal)) — Se imprime True.

📥 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 int

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

Ver el curso completo →

37+ horas · 734 actividades · Proyecto real · Acceso de por vida · 14 días de garantía

Compartir