elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  ¿Sobrecargar las funciones standard o crear nuestros propios metodos? [PYTHON]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Sobrecargar las funciones standard o crear nuestros propios metodos? [PYTHON]  (Leído 3,173 veces)
Yidu

Desconectado Desconectado

Mensajes: 133


Ver Perfil
¿Sobrecargar las funciones standard o crear nuestros propios metodos? [PYTHON]
« en: 9 Enero 2017, 19:26 pm »

Hola!

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
  1. class Persona:
  2.    def __init__(self, nombre, edad):
  3.        self.nombre = nombre
  4.        self.edad = edad
  5.        self.inventario = '1,2,3,4,5,6,7'.split(',')
  6.  
  7.    # metodos aritmeticos
  8.  
  9.    def __add__(self, other):
  10.        # suma
  11.        return self.edad + other.edad    
  12.  
  13.    def __sub__(self, other):
  14.        # resta
  15.        return self.edad - other.edad
  16.  

Para sobrecargar la funcion standard de python pow(a, b):

Código
  1. def __pow__(self, valor):
  2.        # potenciacion
  3.        return self.edad ** valor

Luego instanciariamos:

Código
  1. p1 = Persona('Juan', 30)
  2. p2 = Persona('Ivan', 20)

Y probariamos las sobrecargas:

Código
  1. print(p1 + p2) # 50 (__add__)
  2. print(p1 - p2) # 10 (__sub__)
  3. 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
  1. def __len__(self):
  2.        return len(self.inventario)

Aunque funcionar, funciona...

Código
  1. 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
  1. def __str__(self):
  2.        # se ejecuta mediante print()
  3.        return 'Nombre: {}'.format(self.nombre)

No esto:

Código
  1. def __print__(self):
  2.        # se ejecuta mediante print()
  3.        return 'Nombre: {}'.format(self.nombre)

Resumiendo, ¿Es mejor crear nuestros propios metodos y meter dentro de ellos las funciones standard?

Saludos!  :)


« Última modificación: 9 Enero 2017, 19:32 pm por Yidu » En línea

Eleкtro
Ex-Staff
*
Conectado Conectado

Mensajes: 9.878



Ver Perfil
Re: ¿Sobrecargar las funciones standard o crear nuestros propios metodos? [PYTHON]
« Respuesta #1 en: 15 Enero 2017, 09:19 am »

Hola.

No me considero el más cualificado para aconsejar sobre directrices de diseño en el lenguaje Python, más que nada por lo restrictivo (dogmático, odioso, pesado, cansino, feo) que me resulta, y la cantidad de cosas que ignoro a nivel avanzado sobre dicho lenguaje, sin embargo, desde un punto de vista objetivo con un enfoque global hacia los lenguajes de programación en si, yo te diría que implementases sobrecargas siempre que se diesen las circunstancias óptimas para hacerlo (por ejemplo si defines un método con la misma firma y propósito que un método built-in pero que toma un parámetro adicional), puesto que de esta manera estarías simplificando el modo de empleo de tu código, un gran beneficio productivo de cara a ti y al usuario final.

Si por ejemplo defines dos métodos con el mismo propósito de por ejemplo escribir un valor del mismo type en un archivo local, y los dos métodos tienen practicamente la misma firma/parametización pero con leves diferencias, entonces resultaría innecesario llamarlos por nombres distintos, uno debería ser la sobrecarga.

Un saludo!.


« Última modificación: 15 Enero 2017, 09:20 am por Eleкtro » En línea



Yidu

Desconectado Desconectado

Mensajes: 133


Ver Perfil
Re: ¿Sobrecargar las funciones standard o crear nuestros propios metodos? [PYTHON]
« Respuesta #2 en: 15 Enero 2017, 18:31 pm »

Gracias por el consejo. Yo pienso mas o menos parecido.

Aunque todavia no domino el tema de las clases en Python, soy mas partidario de usar las funciones standard y que ellas operen con los objetos. Esta claro, que para programadores avanzados, quizas las builtins se le quedaran cortas. Pero no es mi caso. Dudo que haya mucha gente que domine Python al cien por cien. Al poder utilizar tres paradigmas distintos de programacion, a veces dificil cual de ellos escoger para nuestros scripts.

Un saludo!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines