¿Les dais uso a las property en Python?

Iniciado por Yidu, 7 Enero 2017, 21:13 PM

0 Miembros y 1 Visitante están viendo este tema.

Yidu

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 (python) [Seleccionar]
class Circulo_1:
   
    def __init__(self, radio):
        self.radio = radio
       
    @property
    def dameArea(self):
        return 3.14159 * (self.radio ** 2)


2do. EJEMPLO:

Código (python) [Seleccionar]
class Circulo_2:
   
    def __init__(self, radio):
        self.radio = radio       
   
    def dameArea(self):
        return 3.14159 * (self.radio ** 2)
   
    area = property(dameArea)


Y por ultimo sin usar las propiedades:

Código (python) [Seleccionar]
class Circulo_3:
   
    def __init__(self, radio):
        self.radio = radio       
   
    def dameArea(self):
        return 3.14159 * (self.radio ** 2)



Instanciamos y pasamos a correr el codigo en cada ejemplo:

Código (python) [Seleccionar]
# instanciamos:
c1 = Circulo_1(20)
c2 = Circulo_2(20)
c3 = Circulo_3(20)


Código (python) [Seleccionar]
c1.dameArea
1256.636
c2.area
1256.636
c3.dameArea()
1256.636


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?


hsk75rv

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.

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: .

ivancea96

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 (python) [Seleccionar]
x.value = x.value + 5
o
Código (python) [Seleccionar]
x.setValue(x.getValue() + 5)

Yidu

Cita de: ivancea96 en  8 Enero 2017, 01:33 AM

¿Qué es más legible?
Código (python) [Seleccionar]
x.value = x.value + 5
o
Código (python) [Seleccionar]
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.


Yidu

Cita de: hsk75rv en  7 Enero 2017, 21:28 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.