Supongamos que hay una clase llamada animal, pero dentro de esa clase hay numerosas formas, como perro, gato y vaca. Es decir, un animal de clase común consta de una variedad de formas que vienen en una variedad de formas y tamaños y realizan una variedad de funciones. Todo este fenómeno se define con un solo término: polimorfismo. Polimorfismo es un término utilizado en Python para referirse a la capacidad de un objeto para adoptar múltiples formas. El término se deriva de dos términos distintos: poli, que significa numerosos, y morfos, que significa formas. Sabemos que todo tipo de programación tiene complejidad, por esta razón, en Factoria Creativa ofrecemos nuestros servicios de diseño web a medida, ya que somos especialistas en Python y otros códigos de programación.
También te puede interesar: ¿Qué es Laravel? y ¿Cómo funciona?
Clase y objetos
Una clase es una plantilla para crear un objeto. En el siguiente ejemplo, creamos una clase llamada-A y declaramos una variable x, a la que luego se le pasa un valor. Se crea el objeto x y se imprime el valor de x.
Un ejemplo simple que demuestra el concepto de clase y objeto en Python: –
clase A: x = 5 objeto = A() imprimir (objeto.x)
Salida: 5
Constructor
Un constructor es una especie de subrutina en la programación orientada a objetos. Cuando se crea un objeto dentro de una clase, el constructor de funciones se usa para asignar valores a los miembros de datos. Casi cada vez que creamos un objeto en Python, usamos la función __init__(). Usamos la función __init__() casi en todas partes en el polimorfismo.
¿Qué es el polimorfismo en Python?
Polimorfismo es un término usado en Python para referirse a un nombre de función genérico que puede usarse para varios tipos. Esta noción se usa comúnmente en la programación orientada a objetos de Python. Como es el caso con otros lenguajes de programación como Java y C ++, el polimorfismo se implementa en Python para una variedad de propósitos, en particular, Duck Typing, sobrecarga de operadores y métodos, y anulación de métodos. Este polimorfismo se puede lograr de dos formas distintas: sobrecarga y anulación.
Una demostración directa de polimorfismo en Python: –
>>>4+5 9 >>>"4"+"5" 45 >>>"ab"+"cd" a B C D
Podemos ver en el ejemplo anterior que el operador de suma se utiliza en una variedad de formas. En el primer ejemplo, dado que los datos proporcionados son dos valores enteros, el operador realizó una suma de dos números.
Y en el segundo ejemplo, los valores idénticos se proporcionan como datos de cadena y el mismo operador concatena las dos cadenas (la concatenación es el acto de unir dos cadenas de un extremo a otro). En el tercer ejemplo, los datos son dos cadenas, pero el operador es idéntico al anterior y concatena las dos cadenas.
>>>"3"+"ab" 3ab
Aunque el primer valor es un número entero, el operador de suma concatenó los dos textos en este caso.
Por lo tanto, estos fueron algunos de los casos más fundamentales de polimorfismo en Python.
¿Cómo usar el polimorfismo?
Sobrecarga
La sobrecarga se puede clasificar en dos categorías.
- Sobrecarga del operador
- Sobrecarga de métodos
Sobrecarga de operadores
La sobrecarga de operadores es un tipo de sobrecarga en la que un operador puede usarse de formas distintas a
los indicados en su definición predefinida.
>>>imprimir(2*7) 14 >>>imprimir("a"*3) aaa
Así, en el primer ejemplo, el operador de multiplicación multiplicó dos números; pero, en el segundo, ya que
la multiplicación de una cadena y un número entero no es factible, el carácter se muestra tres veces dos veces.
Por lo tanto, demuestra cómo un solo operador puede usarse de varias maneras.
Sobrecarga de operadores en la práctica
Ejemplo 1:
class Vehicle:
def __init__(self, fare):
self.fare = fare
bus= Vehicle(20)
car= Vehicle(30)
total_fare=bus+ car
print(total_fare)
Producción:
Rastreo (llamadas recientes más última): Archivo "G: pythоn рyсhаrm роjeсtmаin.рy", línea 7, en tarifa_total=autobús+coche TypeError: tipos de operandos no admitidos para +: 'Vehículo' y 'Vehículo'
En el ejemplo anterior, ocurrió un error porque Python no puede combinar dos objetos. En
este caso, el artículo es un vehículo.
Ahora llega el momento de utilizar la sobrecarga de operadores.
Ahora vamos a sobrecargar el operador __add__ del método específico.
clase de vehículo: def __init__(auto, tarifa): self.fare = hacer def __add__(self, other)://usando la función especial operador __add__ ida y vuelta propia tarifa+ otra.tarifa autobús= Vehículo(20) coche= Vehículo(30) tarifa_total=autobús+coche imprimir (tarifa_total)
Producción:
50
Al sobrecargar la función especial, declaramos que cada vez que usamos el operador más en el objeto
total_fare=bus+car, se añadirán sus tarifas.
Ejemplo 2: En este ejemplo, comparemos las tarifas de varios modos de transporte.
class Vehicle:
def __init__(self, fare):
self.fare = fare
def __lt__(self, other):// relational operator __lt__ is used here as the special function
return self.fare< other.fare
bus= Vehicle(10)
car= Vehicle(30)
compare=bus< car
print(compare)
Producción:
Verdadero
En el ejemplo anterior, el operador relacional __lt__ se utiliza como una función especial para permitir que el operador
sobrecargando
Sobrecarga de métodos
La sobrecarga de un método se refiere a una clase que tiene muchos métodos con el mismo nombre pero quizás distintos
parámetros Si bien Python no permite de forma nativa la sobrecarga de métodos, hay numerosos
técnicas para hacer esto. Si bien la sobrecarga de métodos es posible, solo los métodos especificados más recientemente
son utilizables.
Tratemos de entender con la ayuda de un ejemplo.
Supongamos una clase A, dentro de la clase hemos tomado una función show que tiene un constructor propio y
argumentos con el valor predeterminado Ninguno y Ninguno. Luego creé un objeto y ejecuté la función.
con el objeto obj.show, pero no proporcioné ningún argumento, a pesar de que mostraría Ninguno
y Ninguno ya que establecemos valores predeterminados en el área de funciones.
Ejemplo:
clase A: def show(self, a=Ninguno, b=Ninguno): imprimir (a, b) objeto=A() obj.show()
Producción:
Ninguno Ninguno
Para proporcionar otro valor, ahora debo usar otro método obj.show() con un argumento.
Ejemplo:
clase A: def show(self, a=Ninguno, b=Ninguno): imprimir (a, b) objeto=A() obj.show() obj.mostrar(4)
Producción:
Ninguno Ninguno 4 Ninguno
El valor Ninguno proporcionado a an en la parte de la función se sustituye por 4 en la salida. Se da la parte 4
como argumento de la llamada a la función.
Ahora, examinemos qué sucede si enviamos dos argumentos a la llamada de función en el siguiente ejemplo.
Ejemplo:
clase A: def show(self, a=Ninguno, b=Ninguno): imprimir (a, b) objeto=A() obj.show() obj.mostrar(4) obj.mostrar(4,5)
Producción:
Ninguno Ninguno 4 4 5
Debido al hecho de que enviamos dos parámetros 4 y 5 durante la llamada a la función, dos valores distintos para un
yb están asignados.
Así, en el ejemplo anterior, vimos cómo podemos utilizar el mismo método y llamar a funciones distintas
en una variedad de formas.
Considere otro ejemplo en el que utilizamos declaraciones condicionales para invocar varias funciones en
maneras distintas.
Ejemplo:
área de clase: def find_area(self, a=Ninguno, b=Ninguno): si a != Ninguno yb != Ninguno: imprimir("Rectángulo:", (a * b)) elif a != Ninguno: imprimir("cuadrado:", (a * a)) demás: print("Ninguna cifra asignada") obj1 = Área () obj1.find_area() obj1.find_area(10) obj1.find_area(10,20)
Producción:
Sin cifra asignada cuadrado: 100 Rectángulo: 200
Si no se proporcionan argumentos durante la llamada a la función, no se asigna ningún valor; si se pasa un único argumento, se muestra el área de un cuadrado; y si se pasan dos valores, se muestra el área de un rectángulo.
Herencia
Antes de entrar en la anulación de métodos, es necesario comprender la herencia inicial de Python. La herencia es el método por el cual una clase puede derivarse de cualquier clase base, y la clase derivada hereda todos los atributos de la clase base. La herencia alivia el desafío de escribir repetidamente el mismo código y mejora la reutilización.
Ejemplo de herencia:
clase Pájaro://clase base Pájaro def sonido(auto): imprimir("Sonidos de pájaros") # Perro de clase infantil hereda la clase base Animal clase Gorrión(Pájaro)://niño clase Gorrión def tweet (auto): print("gorrión twitteando") d = gorrión() d.tweet() d.sonido()
Producción:
Gorrión tuiteando Sonido de pájaros
Anulación de métodos
La anulación de métodos es el proceso de cambiar una clase base usando los métodos y parámetros de una clase derivada.
Considere un ejemplo para demostrar cómo funciona. Para comenzar, diseñaremos una clase base que contenga un método y luego una clase derivada sin métodos.
Ejemplo:
clase de vehículo: def ejecutar (auto): imprimir("Ahorra energía") clase EV (Vehículo): aprobar ev = VE () ev.run()
Como resultado, cuando se invoca la función, la salida mostrará el método de la clase base, ya que la clase derivada carece de método.
Producción:
Ahorra energía
Ahora, en el siguiente ejemplo, definimos otro método con el mismo nombre que la clase base pero con un parámetro diferente en la clase derivada. Debido al hecho de que el método de la clase base ha sido anulado por la clase derivada, la salida incluirá solo el método de la clase derivada.
Ejemplo:
clase de vehículo: def ejecutar (auto): imprimir("Ahorra energía") clase EV (Vehículo): def ejecutar (auto): imprimir("Funciona con electricidad") ev = VE () ev.run()
Producción:
Funciona con electricidad Función Súper()
Debido al hecho de que el método de la clase base se anuló, el método de la clase base no se puede invocar normalmente. Por lo tanto, para invocar el método de la clase base, debemos utilizar la superfunción en el método anulado de la clase derivada.
Ejemplo:
clase de vehículo: def ejecutar (auto): imprimir("Ahorra energía") clase EV (Vehículo): def ejecutar (auto): super().run()//la función super se usa para llamar al método de la clase base imprimir("Funciona con electricidad") ev = VE () ev.run()
Producción:
Ahorra energía Funciona con electricidad