Documentos de Académico
Documentos de Profesional
Documentos de Cultura
En otros tutoriales hemos visto como se crean y usan los decoradores en Python. A
continuación veremos el decorador @property, que viene por defecto con Python, y
puede ser usado para modificar un método para que sea un atributo o propiedad. Es
importante que conozcan antes la programación orientada a objetos.
El decorador puede ser usado sobre un método, que hará que actúe como si fuera un
atributo.
class Clase:
def __init__(self, mi_atributo):
self.__mi_atributo = mi_atributo
@property
def mi_atributo(self):
return self.__mi_atributo
Como si de un atributo normal se tratase, podemos acceder a el con el objeto . y
nombre.
mi_clase = Clase("valor_atributo")
mi_clase.mi_atributo
# 'valor_atributo'
Muy importante notar que aunque mi_atributo pueda parecer un método, en realidad no
lo es, por lo que no puede ser llamado con ().
class Clase:
def __init__(self, mi_atributo):
self.mi_atributo = mi_atributo
mi_clase = Clase("valor_atributo")
mi_clase.mi_atributo
# 'valor_atributo'
Bien, la explicación no es sencilla, pero está relacionada con el concepto de
encapsulación de la programación orientada a objetos. Este concepto nos indica que
en determinadas ocasiones es importante ocultar el estado interno de los objetos al
exterior, para evitar que sean modificados de manera incorrecta. Para la gente que
venga del mundo de Java, esto no será nada nuevo, y está muy relacionado con los
métodos set()y get() que veremos a continuación.
La primera diferencia que vemos entre los códigos anteriores es el uso de __ antes
de mi_atributo. Cuando nombramos una variable de esta manera, es una forma de
decirle a Python que queremos que se “oculte” y que no pueda ser accedida como el
resto de atributos.
class Clase:
def __init__(self, mi_atributo):
self.__mi_atributo = mi_atributo
mi_clase = Clase("valor_atributo")
# mi_clase.__mi_atributo # Error!