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