IIC2233 / Syllabus

135 stars 11 forks source link

Sobre el uso de property(_get, _set) #224

Closed davasconcellos closed 2 weeks ago

davasconcellos commented 2 weeks ago

Prerrequisitos

(Marcar colocando una X entre los corchetes los ítems que ya hiciste, así: "[X]")

Duda

Estaba haciendo la Actividad con property(_get_atributo, _set_atributo), — para entenderlo bien y porque no me gusta como se ve el @ :( — y no entiendo como funciona. Piden en el getter retornar el valor de energía y chequearlo para cambiarlo en el setter, pero cuando intento hacerlo mediante property() solo puedo cambiar el atributo que se entrega inicialmente con el _get. Probé con los notebooks de los contenidos y el _set solo sirve para cuando el atributo cambia posteriormente a cuando se crea. Ej:

class MiClase:
    def __init__(self, atributo):
        self._atributo = atributo

    def _get_atributo(self):
        return self._atributo

    def _set_atributo(self, value):
        self._atributo = 2 

    atributo = property(_get_atributo, _set_atributo)

nuevo_objeto = MiClase(6)
print(nuevo_objeto.atributo)        # esto imprime 6 (con lo que inicializa)
nuevo_objeto.atributo= 10
print(nuevo_objeto.atributo)        # esto imprime 2 (lo del setter)

¿Esto funciona así y hay que poner todo en el getter en la propiedad de energía o hay algo que estoy haciendo mal? También me gustaríá saber cual es la mejor práctica cuando se usan properties y por qué.

Edit: Leí que el valor puede ser entregado después pero asumo que si se da al principio también habría que modificarlo si no cumple las condiciones?

R3Y3X commented 2 weeks ago

Holaaaa espero que estés bien 😄 , acá te dejo una issue donde se explica las property super bien #205. No hay una sintaxis o uso mejor o peor, pero el uso del decorador @property logra ágilmente hacer los llamados y asignaciones. Es mas elegante y mejora la redacción del código. Éxito en la actividad ⚡