Cómo comprobar si una clase es una subclase de otra en Python

PythonPythonBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás cómo verificar si una clase es una subclase de otra clase en Python. Esto implica explorar la herencia de clases, un concepto fundamental en la programación orientada a objetos.

Comenzarás creando una clase padre Animal con un constructor y un método speak. Luego, crearás clases hijas Dog y Cat que heredan de Animal y sobrescriben el método speak. Finalmente, aprenderás cómo usar la función issubclass() e inspeccionar el atributo __bases__ para determinar las relaciones de subclases.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ObjectOrientedProgrammingGroup(["Object-Oriented Programming"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python/FunctionsGroup -.-> python/build_in_functions("Build-in Functions") python/ObjectOrientedProgrammingGroup -.-> python/classes_objects("Classes and Objects") python/ObjectOrientedProgrammingGroup -.-> python/inheritance("Inheritance") subgraph Lab Skills python/build_in_functions -.-> lab-559501{{"Cómo comprobar si una clase es una subclase de otra en Python"}} python/classes_objects -.-> lab-559501{{"Cómo comprobar si una clase es una subclase de otra en Python"}} python/inheritance -.-> lab-559501{{"Cómo comprobar si una clase es una subclase de otra en Python"}} end

Explorar la Herencia de Clases

En este paso, aprenderás sobre la herencia de clases, un concepto fundamental en la programación orientada a objetos (OOP, por sus siglas en inglés). La herencia te permite crear nuevas clases (clases hijas) que heredan atributos y métodos de clases existentes (clases padre). Esto promueve la reutilización de código y ayuda a construir código más organizado y mantenible.

Comencemos creando una simple clase padre llamada Animal:

## Create a file named animal.py in the ~/project directory
class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        print("Generic animal sound")

Abre tu editor de VS Code y crea un nuevo archivo llamado animal.py en el directorio ~/project. Copia y pega el código anterior en el archivo. Esta clase tiene un método __init__ (constructor) que inicializa el atributo name y un método speak que imprime un sonido genérico de animal.

Ahora, creemos una clase hija llamada Dog que herede de la clase Animal:

## Add the following code to animal.py
class Dog(Animal):
    def speak(self):
        print("Woof!")

Agrega el código anterior al archivo animal.py. La clase Dog hereda de Animal especificando Animal entre paréntesis después del nombre de la clase. La clase Dog también sobrescribe el método speak para proporcionar su propia implementación específica.

A continuación, creemos otra clase hija llamada Cat que también herede de la clase Animal:

## Add the following code to animal.py
class Cat(Animal):
    def speak(self):
        print("Meow!")

Agrega el código anterior al archivo animal.py. La clase Cat también hereda de Animal y sobrescribe el método speak.

Ahora, creemos un programa principal para usar estas clases:

## Create a file named main.py in the ~/project directory
from animal import Animal, Dog, Cat

animal = Animal("Generic Animal")
dog = Dog("Buddy")
cat = Cat("Whiskers")

animal.speak()
dog.speak()
cat.speak()

Crea un nuevo archivo llamado main.py en el directorio ~/project y copia y pega el código anterior en el archivo. Este programa importa las clases Animal, Dog y Cat del archivo animal.py. Luego, crea instancias de cada clase y llama a sus métodos speak.

Para ejecutar el programa, abre tu terminal en VS Code y navega hasta el directorio ~/project:

cd ~/project

Luego, ejecuta el script main.py usando el comando python:

python main.py

Deberías ver la siguiente salida:

Generic animal sound
Woof!
Meow!

Esto demuestra cómo las clases Dog y Cat heredan de la clase Animal y proporcionan sus propias implementaciones específicas del método speak. Este es un ejemplo básico de herencia de clases en Python.

Usar la Función issubclass()

En este paso, aprenderás cómo usar la función issubclass() para verificar si una clase es una subclase de otra clase. Esta función es una función incorporada de Python que devuelve True si el primer argumento es una subclase del segundo argumento, y False en caso contrario.

Continuando con el ejemplo del paso anterior, usemos la función issubclass() para verificar las relaciones entre las clases Animal, Dog y Cat.

Abre tu editor de VS Code y crea un nuevo archivo llamado issubclass_example.py en el directorio ~/project. Copia y pega el siguiente código en el archivo:

## Create a file named issubclass_example.py in the ~/project directory
from animal import Animal, Dog, Cat

print(issubclass(Dog, Animal))
print(issubclass(Cat, Animal))
print(issubclass(Dog, Cat))
print(issubclass(Animal, Dog))
print(issubclass(Animal, Animal))

Este programa importa las clases Animal, Dog y Cat del archivo animal.py que creaste en el paso anterior. Luego, usa la función issubclass() para verificar las siguientes relaciones:

  • ¿Es Dog una subclase de Animal?
  • ¿Es Cat una subclase de Animal?
  • ¿Es Dog una subclase de Cat?
  • ¿Es Animal una subclase de Dog?
  • ¿Es Animal una subclase de sí misma?

Para ejecutar el programa, abre tu terminal en VS Code y navega hasta el directorio ~/project:

cd ~/project

Luego, ejecuta el script issubclass_example.py usando el comando python:

python issubclass_example.py

Deberías ver la siguiente salida:

True
True
False
False
True

Esta salida muestra que:

  • Dog es una subclase de Animal (Verdadero)
  • Cat es una subclase de Animal (Verdadero)
  • Dog no es una subclase de Cat (Falso)
  • Animal no es una subclase de Dog (Falso)
  • Animal es una subclase de sí misma (Verdadero)

La función issubclass() es útil para verificar las relaciones de herencia entre clases en tu código. Esto puede ser útil para asegurarte de que tu código se comporte como se espera y para escribir código más robusto y mantenible.

Inspeccionar el Atributo __bases__

En este paso, aprenderás cómo inspeccionar el atributo __bases__ de una clase para encontrar sus clases padre directas. El atributo __bases__ es una tupla que contiene las clases padre de una clase.

Continuando con el ejemplo de los pasos anteriores, inspeccionemos el atributo __bases__ de las clases Animal, Dog y Cat.

Abre tu editor de VS Code y crea un nuevo archivo llamado bases_example.py en el directorio ~/project. Copia y pega el siguiente código en el archivo:

## Create a file named bases_example.py in the ~/project directory
from animal import Animal, Dog, Cat

print(Dog.__bases__)
print(Cat.__bases__)
print(Animal.__bases__)

Este programa importa las clases Animal, Dog y Cat del archivo animal.py que creaste en los pasos anteriores. Luego, imprime el atributo __bases__ de cada clase.

Para ejecutar el programa, abre tu terminal en VS Code y navega hasta el directorio ~/project:

cd ~/project

Luego, ejecuta el script bases_example.py usando el comando python:

python bases_example.py

Deberías ver la siguiente salida:

(<class 'animal.Animal'>,)
(<class 'animal.Animal'>,)
(<class 'object'>,)

Esta salida muestra que:

  • La clase Dog hereda de la clase Animal.
  • La clase Cat hereda de la clase Animal.
  • La clase Animal hereda de la clase object, que es la clase base para todas las clases en Python.

El atributo __bases__ es útil para entender la jerarquía de herencia de tus clases. Esto puede ser útil para depurar y para escribir código más mantenible.

Resumen

En este laboratorio, exploraste la herencia de clases en Python, un concepto clave en la programación orientada a objetos. Creaste una clase padre Animal con un constructor y un método speak, y luego definiste las clases hijas Dog y Cat que heredan de Animal.

Estas clases hijas sobrescribieron el método speak para proporcionar sus propias implementaciones específicas, lo que demuestra cómo la herencia permite la reutilización y especialización del código. Finalmente, creaste instancias de estas clases y llamaste a sus métodos speak para observar las diferentes salidas.