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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  ¿Les dais uso a las property en Python?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Les dais uso a las property en Python?  (Leído 4,118 veces)
Yidu

Desconectado Desconectado

Mensajes: 133


Ver Perfil
¿Les dais uso a las property en Python?
« 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?



En línea

hsk75rv

Desconectado Desconectado

Mensajes: 36



Ver Perfil
Re: ¿Les dais uso a las property en Python?
« Respuesta #1 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.

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


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: ¿Les dais uso a las property en Python?
« Respuesta #2 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)
En línea

Yidu

Desconectado Desconectado

Mensajes: 133


Ver Perfil
Re: ¿Les dais uso a las property en Python?
« Respuesta #3 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.

En línea

Yidu

Desconectado Desconectado

Mensajes: 133


Ver Perfil
Re: ¿Les dais uso a las property en Python?
« Respuesta #4 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.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Fatal error: Cannot access empty property in...
PHP
Thaorius 2 4,474 Último mensaje 30 Diciembre 2006, 06:09 am
por Thaorius
Property Viewer
.NET (C#, VB.NET, ASP)
Eleкtro 0 1,975 Último mensaje 5 Enero 2013, 16:33 pm
por Eleкtro
Property en PHP
PHP
alex171294 0 1,370 Último mensaje 8 Noviembre 2013, 00:50 am
por alex171294
Me dais la vida, práctica C!!!!!!!!
Ejercicios
jdvn 0 3,446 Último mensaje 17 Diciembre 2015, 18:50 pm
por jdvn
consulta sobre property
.NET (C#, VB.NET, ASP)
feedf 8 3,166 Último mensaje 30 Marzo 2017, 11:09 am
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines