Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Yidu en 7 Enero 2017, 21:13 pm



Título: ¿Les dais uso a las property en Python?
Publicado por: Yidu en 7 Enero 2017, 21:13 pm
Hola de nuevo...

Igual la pregunta es una herejia. Si es asi, pido disculpas. Pero creo, que ha dia de hoy, aun no le encuentro un uso sustancial con las clases (me refiero al uso de las propiedades).

Supongo que como todo el mundo al estudiar la POO, uno se enfoca con los atributos, metodos, herencia, sobrecarga de metodos, polimorfismo y un poco menos encapsulacion. Digo un poco menos "encapsulacion" por que Python tampoco trata los metodos y atributos de forma privada al cien por cien.

Por lo que entiendo, una propiedad o property dentro de una clase, significa usar un metodo como si fuera un atributo. Pero cuando pasamos a llamar a ese metodo usando la propiedad solo obviamos los parentesis. Es por eso que tampoco veo tanto ahorro.

Pongo los ejemplos clasicos de una clase Circulo. Los dos primeros ejemplos son semejantes. Osea, en el primer ejemplo usamos el decorador @property. En el segundo, la funcion interna property()

1er EJEMPLO:

Código
  1. class Circulo_1:
  2.  
  3.    def __init__(self, radio):
  4.        self.radio = radio
  5.  
  6.    @property
  7.    def dameArea(self):
  8.        return 3.14159 * (self.radio ** 2)

2do. EJEMPLO:

Código
  1. class Circulo_2:
  2.  
  3.    def __init__(self, radio):
  4.        self.radio = radio        
  5.  
  6.    def dameArea(self):
  7.        return 3.14159 * (self.radio ** 2)
  8.  
  9.    area = property(dameArea)

Y por ultimo sin usar las propiedades:

Código
  1. class Circulo_3:
  2.  
  3.    def __init__(self, radio):
  4.        self.radio = radio        
  5.  
  6.    def dameArea(self):
  7.        return 3.14159 * (self.radio ** 2)


Instanciamos y pasamos a correr el codigo en cada ejemplo:

Código
  1. # instanciamos:
  2. c1 = Circulo_1(20)
  3. c2 = Circulo_2(20)
  4. c3 = Circulo_3(20)
  5.  

Código
  1. c1.dameArea
  2. 1256.636
  3. c2.area
  4. 1256.636
  5. c3.dameArea()
  6. 1256.636
  7.  

En el tercer caso, sin usar property, solo hemos de poner dos parentesis y punto. Tampoco lo veo nada del otro mundo. En el segundo ejemplo, podemos crear un variable asignandole los valores de metodo usando la funcion property(). Y en el primer caso, usando un decorador.

Supongo que muchos programadores avanzados le daran uso a las propiedades. Y mas aun con los getters y setters. Pero si no usamos atributos o metodos semi-privados ¿Es necesario usar las propiedades en python?



Título: Re: ¿Les dais uso a las property en Python?
Publicado por: hsk75rv en 7 Enero 2017, 21:28 pm
Yidu  :D


Una búsqueda de @property en la web (dado que desconocía la propiedad, si es que se le pueda llamar así...) me ha conducido a este enlace https://www.programiz.com/python-programming/property (https://www.programiz.com/python-programming/property).

Viendo cómo plantea el problema el redactor, property tiene bastante sentido ahí,... no sé si te servirá.
Y comparto un poco el pensamiento de que creo, que hay elementos de más en el modelo POO que, si bien tienen su funcionalidad, aveces en mi opinión, esa funcionalidad está rebuscada  :rolleyes: .


Título: Re: ¿Les dais uso a las property en Python?
Publicado por: ivancea96 en 8 Enero 2017, 01:33 am
Esta misma utilidad está también en toros lenguajes, como C#.

No es obligatorio usarlo, pero es útil en múltiples casos. Además, permite un código más "legible" (aunque esto sea subjetivo), si bien hace el código un poco "oscuro", pues ese atributo realmente está haciendo"algo" por detrás.

Ejemplo:
¿Qué es más legible?
Código
  1. x.value = x.value + 5
o
Código
  1. x.setValue(x.getValue() + 5)


Título: Re: ¿Les dais uso a las property en Python?
Publicado por: Yidu en 8 Enero 2017, 12:05 pm

¿Qué es más legible?
Código
  1. x.value = x.value + 5
o
Código
  1. x.setValue(x.getValue() + 5)

Hombre...yo veo mas legible el primer codigo. En todo caso, nunca me ha convencido el hecho de este tipo de decoraciones. Incluso en el tema de las funciones. Lo que se llama decorar una funcion. A mi modo de ver, hace el codigo mas confuso. Pero claro, seguramente en un nivel mas avanzado de programacion deben ser utiles.

Y haciendo caso al zen de Python: Simple mejor que complejo.



Título: Re: ¿Les dais uso a las property en Python?
Publicado por: Yidu en 8 Enero 2017, 12:14 pm

hay elementos de más en el modelo POO que, si bien tienen su funcionalidad, aveces en mi opinión, esa funcionalidad está rebuscada  :rolleyes: .


Yo opino mas o menos igual. No es raro ver algun videotutorial por internet (y se lian mas que un gato con un ovillo de lana) donde demuestran la eficiencia y utilidad de alguna de estas cosas. Hace poco vi la demostracion para decorar una simple funcion. No se, vi demasiado codigo para algo tan simple. Aunque claro, cada cual tendra su opinion. Supongo para programas cortos toda esta programacion avanzada no se necesite. Por eso tampoco quiero decir que sea mala cosa este tipo de decoraciones en algunos casos.