Polimorfismo de pitón

Polimorfismo de pitón

Introducción

El polimorfismo es otro aspecto importante de la programación orientada a objetos. No hay fanáticos de Warcraft, no tiene nada que ver con convertir a las personas en ovejas. Eso sería mucho más genial. En cambio, el polimorfismo permite que los métodos y funciones usen clases con funcionalidad similar de la misma manera.

El polimorfismo reduce la cantidad de código que debe escribir eliminando la redundancia de una manera lógica y significativa. Se basa en usted, el programador, para ser inteligente en su diseño y similitudes de arnés en objetos.

¿Qué es el polimorfismo??

El polimorfismo es una de esas cosas que es difícil de definir en una sola palabra o frase. El término toma formas ligeramente diferentes en diferentes lenguajes de programación, lo que hace que sea un poco más difícil precisar de manera concisa. En términos generales, y en Python, es la capacidad de múltiples objetos diferentes derivados de diferentes clases que se utilizarán de la misma manera.

Para usar el ejemplo de los automóviles con los que esta guía ha estado trabajando, imagine que necesita escribir una función que llame al Move_Forward método en cualquier tipo de automóvil que se pase. Cada objeto creado a partir de la clase original de "automóvil" o cualquiera de las subclases que lo extienden debería tener un Move_Forward Método, incluso si se ha anulado hacer algo de manera ligeramente diferente en algunas de las subclases. Esto significa que a través del polimorfismo, puede escribir una función única que tome un objeto y llame Move_Forward. Dado que todos los objetos instanciados de las subclases de "automóvil" todavía son técnicamente objetos de "automóvil" y tienen todas sus propiedades originales de una forma u otra, esto funcionará.

Tenga en cuenta que la especificación de una sola superclase para usar como tipo de objeto no es del todo necesaria en Python. Python no está fuertemente escrito, por lo que no tiene que definir explícitamente qué tipos de variables toman un método o función. En idiomas como Java, esto juega un papel en cómo se comporta el polimorfismo. Sin embargo, en Python, es una buena idea pensar en ello en este sentido para asegurarse de que los objetos que pasen tengan el método o propiedad que se utiliza.

Usándolo en Python

Ahora, realmente sería útil ver todo esto en acción. No es tan complejo como probablemente estés pensando en este momento. Primero, asegúrese de estar configurado con las clases de ejemplo. Si aún no los tienes, están justo debajo.

Class Car (objeto): def __init __ (self, make = 'ford', model = 'Pinto', año = '1971', kilometraje = 253812, color = 'naranja'): self.__make = hacerse yo.__model = modelo yo.__ años = año yo.__mileage = kilometraje.__color = color def set_make (self, make): self.__make = hacer def get_make (self): return yo.__make def set_model (self, modelo): self.__model = modelo def get_model (self): return yo.__model def set_year (self, año): self.__Year = año def get_year (self): return yo.__ años def set_mileage (self, kilometlee): self.__mileage = kilometrage def get_mileage (self): return yo.__mileage def set_color (self, color): self.__color = color def get_color (self): return yo.__color def move_forward (self, velocidad): imprime ("su %s está avanzando en %s" %(self.__model, velocidad)) def move_backward (self, velocidad): imprimir ("moverse hacia atrás en % s" % velocidad) clase musclecar (automóvil): def __init __ (self, make = 'ford', model = 'mustang', año = '1965', kilometraje = 54032, color = 'azul', hp = 325): super ().__init __ (hacer, modelo, año, kilometraje, color) yo.__hp = hp def set_hp (self, hp): self.__hp = hp def get_hp (self): return yo.__hp def drag_race (yo, oponente): if (self.__HP> oponente.get_hp ()): devuelve "ganas!"Else: regresa" pierdes!"Def Trade_Up (self, año, color): super ().set_year (año) super ().set_color (color) super ().set_mileage (0) 

Con las clases de demostración configuradas, puede probar una función rápida que usa el polimorfismo para llamar Move_Forward.

newmusCleCar = musclecar () newcar = Car () def go_25 (car_object): car_object.Move_forward ("25mph") GO_25 (NewCar) GO_25 (NewMusCleCar) 

Ambas llamadas de la función se comportan exactamente igual, a pesar de que se pasaron por diferentes objetos que se crearon a partir de diferentes clases. Gracias al polimorfismo, no tiene que escribir dos funciones diferentes y puede usar las propiedades similares de los objetos para escribir solo una función.

Intente anular uno de los Move_Forward Método en la clase "musclecar". Ejecute la función nuevamente y vea lo que sucede.

 clase musclecar (automóvil): ... def move_forward (self, velocidad): imprime ("su increíble %s está rugiendo en el camino en %s" %(self.__modelo, velocidad)) .. 

Cuando la función llama al Move_Forward método en el objeto muscle car, todavía funciona perfectamente, y se utiliza la versión anulada del método.

Pensamientos de cierre

El polimorfismo parece que sería un concepto terriblemente complejo, pero su nombre es algo mal dirigido. El concepto en sí no es tan intimidante, e incluso ayuda a simplificar la estructura general de su código.

Un tema común en la programación orientada a objetos es la eliminación de la redundancia a través del código reutilizable y adaptable. El polimorfismo es una parte importante de esa imagen.

Ejercicios

  1. Use las clases de ejemplo para instanciar un objeto de "automóvil" y un objeto "musclecar".
  2. Cree una función que pueda interactuar con cualquier tipo de objeto "CAR".
  3. Llame a su función dos veces, pasándola ambos objetos.
  4. Anular uno de los métodos en la clase MuscleCar. Asegúrese de no cambiar los parámetros que acepta drásticamente.
  5. Llame a su función nuevamente.
  6. Cree una nueva clase que hereda de la clase de "automóvil".
  7. Instanciar un nuevo objeto de su clase recién creada. Pase el objeto a su función.

Tutoriales de Linux relacionados:

  • Una introducción a la automatización, herramientas y técnicas de Linux
  • Cosas para instalar en Ubuntu 20.04
  • Cómo construir una aplicación Tkinter utilizando un objeto orientado ..
  • Cómo escribir extensiones de Nautilus con Nautilus-Python
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Configuración de ZFS en Ubuntu 20.04
  • Mastering Bash Script Loops
  • Cómo trabajar con la API REST de WooCommerce con Python
  • Mint 20: Mejor que Ubuntu y Microsoft Windows?
  • Programador EEPROM CH341A: lea y escriba datos para chips en ..