Python Polimorfismo
La palabra "polimorfismo" significa "muchas formas" y en programación se refiere a métodos/funciones/operadores con el mismo nombre que se pueden ejecutar en muchos objetos o clases.
Polimorfismo de función
Un ejemplo de una función de Python que se puede utilizar en diferentes objetos es la función len()
.
String / Cadena
Para cadenas len()
devuelve el número de caracteres:
Tuple / Tupla
Para tuplas, len()
devuelve el número de elementos de la tupla:
Dictionary / Diccionario
Para diccionarios, len()
devuelve el número de pares clave/valor en el diccionario:
Ejemplo
thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
print(len(thisdict))
Inténtalo tú mismo »
Polimorfismo de clase
El polimorfismo se usa a menudo en métodos de clase, donde podemos tener varias clases con el mismo nombre de método.
Por ejemplo, digamos que tenemos tres clases: Car
, Boat
y Plane
, y todos tienen un método llamado move()
:
Ejemplo
Diferentes clases con el mismo método:
class Car:
def __init__(self, brand, model):
self.brand = brand
self.model = model
def move(self):
print("Drive!")
class Boat:
def __init__(self, brand, model):
self.brand = brand
self.model = model
def move(self):
print("Sail!")
class Plane:
def __init__(self, brand, model):
self.brand = brand
self.model = model
def move(self):
print("Fly!")
car1 = Car("Ford", "Mustang") #Crear una clase de Car
boat1 = Boat("Ibiza", "Touring 20") #Crear una clase de Boat
plane1 = Plane("Boeing", "747") #Crear una clase de Plane
for x in (car1, boat1, plane1):
x.move()
Inténtalo tú mismo »
Mira el bucle for al final. Debido al polimorfismo, podemos ejecutar el mismo método para las tres clases.
Polimorfismo de clase de herencia
¿Qué pasa con las clases con clases secundarias con el mismo nombre? ¿Podemos usar polimorfismo allí?
Sí. Si usamos el ejemplo anterior y creamos una clase principal llamada Vehicle
y creamos Car
, Boat
, Plane
clases secundarias de Vehicle
, las clases secundarias heredan los métodos Vehicle
, pero puede anularlos:
Ejemplo
Crea una clase llamada Vehicle
y crea Car
, Boat
, Plane
clases secundarias de Vehicle
:
class Vehicle:
def __init__(self, brand, model):
self.brand = brand
self.model = model
def move(self):
print("Move!")
class Car(Vehicle):
pass
class Boat(Vehicle):
def move(self):
print("Sail!")
class Plane(Vehicle):
def move(self):
print("Fly!")
car1 = Car("Ford", "Mustang") #Crear un objeto de Car
boat1 = Boat("Ibiza", "Touring 20") #Crear un objeto de Boat
plane1 = Plane("Boeing", "747") #Crear un objeto de Plane
for x in (car1, boat1, plane1):
print(x.brand)
print(x.model)
x.move()
Inténtalo tú mismo »
Las clases secundarias heredan las propiedades y métodos de la clase principal.
En el ejemplo anterior puedes ver que la clase Car
está vacía, pero hereda brand
, model
y move()
de Vehicle
.
Las clases Boat
y Plane
también heredan la brand
, model
y move()
del Vehicle
, pero ambos anulan el método move()
.
Debido al polimorfismo, podemos ejecutar el mismo método para todas las clases.