Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

uso de properties #141

Open
5 tasks done
Josefinafp opened this issue Sep 7, 2022 · 1 comment
Open
5 tasks done

uso de properties #141

Josefinafp opened this issue Sep 7, 2022 · 1 comment
Assignees
Labels
Contenidos Dudas sobre contenidos Resuelto

Comments

@Josefinafp
Copy link

Prerrequisitos

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

  • Leí las reglas del foro (Instalación py 3.11.X con X>=7 Syllabus#1).
  • Busqué en las issues si ya preguntaron mi duda y no encontré nada parecido (https://github.com/IIC2233/syllabus/issues).
  • Mi duda no se trata de un tema administrativo o personal, ya que en ese caso debo contactar a mi profe, al Jefe de Bienestar o al correo del curso (iic2233@ing.puc.cl).
  • Utilizaré un título descriptivo y llenaré correctamente esta plantilla.
  • De ser necesario, colocaré código simple que permita explicar mi problema o duda.

Duda

[Estoy perdida con el uso de properties. Si quiero poner una property en una super clase para que las subclases la sobreescriban, pero esta corresponde a un parámetro fijo ¿cómo lo puedo hacer? Ej:
En la super clase:
@Property
def atributo(self):
return self.__atributo
Ahora, si quiero sobre escribir ese atributo, asignándole un parámetro fijo en las subclases, se debe escribir arriba el @Property? y la salida debe ser con una igualdad o con un return? Busqué en contenidos y en la ayudantía pero no vi nada parecido. Espero que me puedan ayudar.]

@Josefinafp Josefinafp changed the title Título descriptivo (reemplazar con el título apropiado) uso de properties Sep 7, 2022
@Lord-Kelsier Lord-Kelsier self-assigned this Sep 8, 2022
@Lord-Kelsier
Copy link

Creo que no estoy entendiendo tu pregunta. A que te refieres con asignarle un parametro fijo? A que salida te refieres?

Igualmente te hago una breve explicacion de las properties.
Las properties se comportan como un atributo mas, solo que te ofrecen control sobre su lectura, escritura y eliminacion. Un ejemplo de aplicacion es un contador de vidas.

class Mario:
    def __init__(self):
        self._vidas = 3

    @property
    def vidas(self):
        print("Alguien esta mirando mis vidas")
        return self._vidas

    @vidas.setter
    def vidas(self, new_value):
        if new_value <= 0:
            print("juego terminado")
            self._vidas = 0
        else:
            self._vidas = new_value


mario = Mario()
print(mario.vidas)
mario.vidas -= 10
print(mario.vidas)
#output
# Alguien esta mirando mis vidas
# 3
# Alguien esta mirando mis vidas
# juego terminado
# Alguien esta mirando mis vidas
# 0

Si ahora heredamos esta clase podemos seguir usarndo las properties

class Luigi(Mario):
    def __init__(self):
        self._vidas = 20


luigi = Luigi()
print(luigi.vidas)
luigi.vidas -= 10
print(luigi.vidas)
#output
# Alguien esta mirando mis vidas
# 20
# Alguien esta mirando mis vidas ----> notar que no perdimos esta vez ya que luigi tiene 20 vidas
# Alguien esta mirando mis vidas
# 10

Si quieres reescribir las properties para una subclase, te recomiendo escribirlas de nuevo, ya que, estuve haciendo unas pruebas y no he conseguido que salga sin arrojar errores o sin usar el nombre de la superclase

@Lord-Kelsier Lord-Kelsier added Contenidos Dudas sobre contenidos Resuelto labels Sep 8, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Contenidos Dudas sobre contenidos Resuelto
Projects
None yet
Development

No branches or pull requests

2 participants