Profundizando mas en el tema de las clases, intento conocer un poco mas los operadores y metodos que seran utiles usando la sobrecarga.
La sobrecarga de operadores esta mas o menos clara:
Código
class Persona: def __init__(self, nombre, edad): self.nombre = nombre self.edad = edad self.inventario = '1,2,3,4,5,6,7'.split(',') # metodos aritmeticos def __add__(self, other): # suma return self.edad + other.edad def __sub__(self, other): # resta return self.edad - other.edad
Para sobrecargar la funcion standard de python pow(a, b):
Código
def __pow__(self, valor): # potenciacion return self.edad ** valor
Luego instanciariamos:
Código
p1 = Persona('Juan', 30) p2 = Persona('Ivan', 20)
Y probariamos las sobrecargas:
Código
print(p1 + p2) # 50 (__add__) print(p1 - p2) # 10 (__sub__) print(p1 ** 2) # 900 (__pow__)
¿Pero como se sobrecargaria, por ejemplo, la funcion standard len()? Seria para comprobar el numero de elementos del atributo self.inventario. Creo que asi seria erroneo:
Código
def __len__(self): return len(self.inventario)
Aunque funcionar, funciona...
Código
print(len(p1)) # 7
La duda es si sobrecargar funciones standard de Python consiste en meter la misma funcion dentro del metodo sobrecargado. Es que visto asi, suena a redundancia ¿No?
Por que cuando queremos utilizar la salida de print mediante la sobrecarga hacemos:
Código
def __str__(self): # se ejecuta mediante print() return 'Nombre: {}'.format(self.nombre)
No esto:
Código
def __print__(self): # se ejecuta mediante print() return 'Nombre: {}'.format(self.nombre)
Resumiendo, ¿Es mejor crear nuestros propios metodos y meter dentro de ellos las funciones standard?
Saludos!