Fijate en este ejemplo simple en Java
Código:
private int numero;
public int getNumero() {
return numero;
}
public void setNumero(int nuevoNumero) {
this.numero = nuevoNumero;
}
O sea: le quitás al "usuario" del método la posibilidad de "tocar" el valor del atributo directamente.
Si quiero obtener el valor de numero, no tengo más remedio que usar el método getNumero(), y el valor solamente lo puedo cambiar usando setNumero()
En python no se hace igual, sino que siempre se accede al atributo con su nombre, y dentro de la clase se asignan las funciones que se encargarán de "controlar" el acceso. Fijate en este ejemplo que encontré en esta página, y comparalo con el de arriba:
Código:
class Contacto(object):
def set_email(self, value):
if '@' not in value:
raise Exception("Esto no parece ser una dirección de correo")
self._email = value
def get_email(self):
return self._email
email = property(get_email, set_email)
La diferencia principal es que luego yo voy a hacer:
como si estuviera asignando directamente, pero en realidad se llamará a la función set_email con el parámetro "
[email protected]".
Espero que quede claro, para terminar creo que es importante mencionar que los nombres son completamente arbitrarios, solamente una convención.
Saludos.