Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> python

Herencia de Python

Herencia de Python

La herencia nos permite definir una clase que toma toda la funcionalidad de una clase principal y nos permite agregar más. En este tutorial, aprenderá a usar la herencia en Python.

Video:Herencia de Python

Herencia en Python

La herencia es una característica poderosa en la programación orientada a objetos.

Se refiere a definir una nueva clase con poca o ninguna modificación a una clase existente. La nueva clase se llama clase derivada (o hija) y la que hereda se llama clase base (o padre) .


Sintaxis de herencia de Python

class BaseClass:
  Body of base class
class DerivedClass(BaseClass):
  Body of derived class

La clase derivada hereda características de la clase base donde se le pueden agregar nuevas características. Esto da como resultado la reutilización del código.


Ejemplo de Herencia en Python

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

Un polígono es una figura cerrada de 3 o más lados. Digamos que tenemos una clase llamada Polygon definido de la siguiente manera.

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("Enter side "+str(i+1)+" : ")) for i in range(self.n)]

    def dispSides(self):
        for i in range(self.n):
            print("Side",i+1,"is",self.sides[i])

Esta clase tiene atributos de datos para almacenar el número de lados n y la magnitud de cada lado como una lista llamada lados .

El inputSides() El método toma la magnitud de cada lado y dispSides() muestra las longitudes de estos lados.

Un triángulo es un polígono de 3 lados. Entonces, podemos crear una clase llamada Triangle que hereda de Polygon . Esto hace que todos los atributos de Polygon clase disponible para el Triángulo clase.

No necesitamos definirlos de nuevo (reutilización de código). Triángulo se puede definir de la siguiente manera.

class Triangle(Polygon):
    def __init__(self):
        Polygon.__init__(self,3)

    def findArea(self):
        a, b, c = self.sides
        # calculate the semi-perimeter
        s = (a + b + c) / 2
        area = (s*(s-a)*(s-b)*(s-c)) ** 0.5
        print('The area of the triangle is %0.2f' %area)

Sin embargo, la clase Triangle tiene un nuevo método findArea() para encontrar e imprimir el área del triángulo. Aquí hay una ejecución de muestra.

>>> t = Triangle()

>>> t.inputSides()
Enter side 1 : 3
Enter side 2 : 5
Enter side 3 : 4

>>> t.dispSides()
Side 1 is 3.0
Side 2 is 5.0
Side 3 is 4.0

>>> t.findArea()
The area of the triangle is 6.00

Podemos ver que aunque no definimos métodos como inputSides() o dispSides() para la clase Triangle por separado, pudimos usarlos.

Si no se encuentra un atributo en la propia clase, la búsqueda continúa hasta la clase base. Esto se repite recursivamente, si la clase base se deriva de otras clases.


Anulación de métodos en Python

En el ejemplo anterior, observe que __init__() se definió el método en ambas clases, Triangle también Polígono . Cuando esto sucede, el método de la clase derivada anula el de la clase base. Es decir, __init__() en Triángulo obtiene preferencia sobre el __init__ en Polígono .

Generalmente, cuando reemplazamos un método base, tendemos a extender la definición en lugar de simplemente reemplazarla. Lo mismo se hace llamando al método en la clase base desde el de la clase derivada (llamando a Polygon.__init__() de __init__() en Triangle ).

Una mejor opción sería usar la función integrada super() . Entonces, super().__init__(3) es equivalente a Polygon.__init__(self,3) y se prefiere. Para obtener más información sobre el super() en Python, visite la función Python super().

Dos funciones integradas isinstance() y issubclass() se utilizan para comprobar herencias.

La función isinstance() devuelve True si el objeto es una instancia de la clase u otras clases derivadas de ella. Todas y cada una de las clases en Python heredan de la clase base object .

>>> isinstance(t,Triangle)
True

>>> isinstance(t,Polygon)
True

>>> isinstance(t,int)
False

>>> isinstance(t,object)
True

Del mismo modo, issubclass() se utiliza para verificar la herencia de clases.

>>> issubclass(Polygon,Triangle)
False

>>> issubclass(Triangle,Polygon)
True

>>> issubclass(bool,int)
True

python

  1. Tipos de datos de Python
  2. Operadores de Python
  3. Declaración de paso de Python
  4. Diccionario de Python
  5. Excepciones personalizadas de Python
  6. Programación orientada a objetos de Python
  7. Sobrecarga del operador de Python
  8. Python @property decorador
  9. type() y isinstance() en Python con ejemplos
  10. C# - Herencia
  11. Python - Orientado a Objetos