English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriales básicos de Python

Control de flujo de Python

Funciones en Python

Tipos de datos en Python

Operaciones de archivos de Python

Objetos y clases de Python

Fecha y hora de Python

Conocimientos Avanzados de Python

Manual de Referencia de Python

Herencia en Python

La herencia nos permite definir una clase que hereda todas las funciones de la clase padre y permite agregar más funciones. En este artículo, aprenderás a usar la herencia en Python.

¿Qué es la herencia?

La herencia es una función poderosa de la programación orientada a objetos.

Se refiere a definir una nuevaclase, que se realiza con pocas o ninguna modificación en la clase existente. La nueva clase se llamaclase derivada (o hija), y la nueva clase que se deriva de ella se llamaLa clase base (o padre).

Sintaxis de herencia en Python

class BaseClass:
  #Cuerpo de la clase base
class DerivedClass(BaseClass):
  #Cuerpo de la clase derivada

Las clases derivadas heredan elementos de la clase base y agregan nuevos elementos. Esto mejora la reutilización del código.

Ejemplo de herencia en Python

Para demostrar el uso de la herencia, veamos un ejemplo.

Un polígono tiene3Un polígono cerrado con uno o más lados.

class Polygon:
    def __init__(self, no_of_sides):
        self.n = no_of_sides
        self.sides = [0 for i in range(no_of_sides)]
    def inputSides(self):
        self.sides = [float(input("Ingresar lados "+str(i+1)+": ")) for i in range(self.n)]
    def dispSides(self):
        for i in range(self.n):
            print("lados",i+1,"es",self.sides[i])

Esta clase tiene propiedades de datos para almacenar el número de lados, los ladosnúmeroy el tamaño de cada lado como una lista, es decirnúmero de lados.

El método inputSides() toma el tamaño de cada lado, al igual que dispSides() los muestra correctamente.

Un triángulo es un polígono con3Un polígono con %d lados. Por lo tanto, podemos crear una clase llamada Triangle que herede de Polygon. Esto permite que todas las propiedades disponibles en Polygon se utilicen fácilmente en Triangle. No necesitamos definirlas de nuevo (reutilización de código). Triangle se define así.

class Triangle(Polygon):
    def __init__(self):
        Polygon.__init__(self,3)
    def findArea(self):
        a, b, c = self.sides
        # Calcular el semiperímetro
        s = (a + b + c) / 2
        área = (s*(s-a)*(s-b)*(s-c)) ** 0.5
        print('El área del triángulo es%0.2f'%area)

Sin embargo, la clase Triangle tiene un nuevo método findArea() para encontrar y imprimir el área del triángulo. Este es un ejemplo de ejecución.

>>> t = Triangle()
>>> t.inputSides()
Ingresar lados 1 : 3
Ingresar lados  2 : 5
Ingresar lados  3 : 4
>>> t.dispSides()
lados 1 es 3.0
lados 2 es 5.0
lados 3 es 4.0
>>> t.findArea()
El área del triángulo es 6.00

Podemos ver que, aunque no hemos definido métodos como inputSides() o sides() para la clase Triangle, podemos usarlos.

Si no se encuentra la propiedad en la clase, la búsqueda continúa hasta la clase base. Si la clase base en sí misma se deriva de otra clase, se repetirá esta operación de manera recursiva.

Method overriding in Python

In the above example, please note that the __init__() method is defined in both the Triangle and Polygon classes. When this happens, the method in the derived class overrides the method in the base class. That is, Triangle.__init__() takes precedence over Polygon.__init__().

Generally, when overriding basic methods, we tend to extend the definition rather than simply replacing it. This is achieved by calling the method of the base class from the derived class (calling Polygon.__init__() from Triangle.__init__()).

The better choice is to use the built-in function super(). Therefore, super().__init__(3) is equivalent to Polygon.__init__(self,3) and is the preferred choice. You can learn more aboutin Python'ssuper() function'sMore information.

The two built-in functions isinstance() and issubclass() are used to check inheritance. If the object is an instance of the class or any other derived class, the function isinstance() returns True. In Python, every class inherits from the base class object.

>>> isinstance(t, Triangle)
True
>>> isinstance(t, Polygon)
True
>>> isinstance(t, int)
False
>>> isinstance(t, object)
True

Similarly, issubclass() is used to check inheritance.

>>> issubclass(Polygon, Triangle)
False
>>> issubclass(Triangle, Polygon)
True
>>> issubclass(bool, int)
True