Polimorfismo en Python
- Polimorfismo en Python
- Usar métodos de clase para polimorfismo en Python
- Usar anulación de métodos para polimorfismo en Python
- Utilice la sobrecarga de funciones y operadores para el polimorfismo en Python
El polimorfismo es una característica de los OOP, lo que significa que un solo nombre puede tener diferentes funciones. Una sola entidad puede tomar diferentes formas.
Este tutorial demostrará cómo se implementa el polimorfismo en Python.
Polimorfismo en Python
La mejor manera de entender esto es usando la función len()
. Esta función se interpreta de manera diferente para diferentes objetos.
Para una lista, devolverá el total de elementos presentes y para una cadena, y el total de caracteres presentes.
Código:
lst = ["delft", "stack"]
s = "delftstack"
print(len(lst), len(s))
Producción :
2 10
Otra funcionalidad común que ilustra el polimorfismo en Python es el operador +
. Este operador puede realizar sumas entre dos números en Python.
Sin embargo, cuando se usa con una cadena, actúa como un operador de concatenación para combinar dos cadenas.
Código:
a = 5 + 6
s = "delft" + "stack"
print(a, s)
Producción :
11 delftstack
Usar métodos de clase para polimorfismo en Python
Todo es un objeto en Python y pertenece a alguna clase. Los métodos están asociados con los objetos de la clase.
Es por eso que el operador +
y la función len()
realizan diferentes funciones para diferentes objetos. El operador +
llama a una función mágica definida de manera diferente para diferentes objetos.
Podemos crear nuestra clase y lograr esto. Dos clases pueden tener funciones con el mismo nombre pero con diferentes propósitos y diferentes definiciones.
Código:
class A:
def fun(self):
print("Class A")
class B:
def fun(self):
print("Class B")
ob1 = A()
ob2 = B()
for i in (ob1, ob2):
i.fun()
Producción :
Class A
Class B
Usar anulación de métodos para polimorfismo en Python
El polimorfismo también está asociado en Python con la herencia de clases. La herencia se refiere a una clase que accede a las características de otra clase.
Una clase y su subclase pueden contener la función con el mismo nombre, y podemos usar la anulación de funciones en Python. Usando la anulación de métodos, podemos implementar el método ya definido en la clase secundaria.
Podemos redefinir la función según la clase secundaria.
Código:
class A:
def fun(self):
print("Class A")
class B(A):
def fun(self):
print("Class B")
ob1 = A()
ob2 = B()
for i in (ob1, ob2):
i.fun()
Producción :
Class A
Class B
En el ejemplo de código anterior, la clase B
hereda de la clase A
, pero el método fun()
se anula en la clase B
y se define de acuerdo con la clase.
También podemos acceder a la función fun()
desde la clase A
en la función anulada.
Código:
class A:
def fun(self):
print("Class A")
class B(A):
def fun(self):
A.fun(self)
print("Class B")
ob2 = B()
ob2.fun()
Producción :
Class A
Class B
Utilice la sobrecarga de funciones y operadores para el polimorfismo en Python
La sobrecarga de funciones es una característica interesante que implementa el polimorfismo. Esta característica no está disponible en Python, y la función definida más reciente se llamará en Python.
Es posible sobrecargar operadores en Python. Sabemos que diferentes operadores pueden realizar diferentes funciones según el tipo de objeto, claramente visible con el operador +
.
Esto sucede porque invoca una función mágica internamente cada vez que se usa un operador. Por ejemplo, el operador +
invoca el método __add__
internamente.
Esta función mágica tiene guiones bajos dobles antes y después de su nombre. Las funciones mágicas no están destinadas a ser invocadas directamente, pero podemos definirlas para diferentes clases para modificar el comportamiento de diferentes operadores.
Código:
class A:
def __init__(self, a):
self.a = a
def __add__(self, o):
return self.a + o.a + 2
ob1 = A(5)
ob2 = A(4)
print(ob1 + ob2)
Producción :
11
En el ejemplo anterior, sobrecargamos el operador +
modificando la función mágica de la clase A
y agregando 2
al resultado.
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn