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
class Circulo_1: def __init__(self, radio): self.radio = radio @property def dameArea(self): return 3.14159 * (self.radio ** 2)
2do. EJEMPLO:
Código
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
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
# instanciamos: c1 = Circulo_1(20) c2 = Circulo_2(20) c3 = Circulo_3(20)
Código
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?