Bienvenido a la Comunidad de Treehouse
¿Quieres colaborar en errores de código? ¿Tienes errores que necesitan comentarios? ¿Buscas un par de ojos adicionales en tu último proyecto? aquí.
¿Buscas aprender algo nuevo?
Treehouse ofrece una prueba gratuita de siete días para estudiantes nuevos. Obtén acceso a miles de horas de contenido y únete a miles de
Inicia tu prueba gratuita
Lewis Mrozek
1,538 Puntos¿Cómo funciona self.use_gas()?
def go(self, velocidad):
if self.usar_gasolina():
if mantiene self.is_moving:
print('El auto comienza a moverse')
self.is_moving = Verdadero
print(f'El auto va a {speed}.')
else:
print('Se acabó el combustible.')
self.detener()
def usar_gasolina(self):
self.gasolina -= 50
if self.gasolina <= 0:
return False
else:
return Verdadero
Cuando llamamos a "if self.use_gas()", ¿la llamada hace que el programa use.gas se ejecute completamente? Tiene sentido, pero no estoy 100% seguro de cómo lo está reuniendo todo. ¿Puede alguien ampliar un poco el concepto?
1 Respuesta
Samuel Tredgett
11.372 PuntosLo importante de entender sobre el uso de "self" en Python es que es esencialmente una referencia a la estructura del objeto que lo está utilizando.
En el ejemplo que has mostrado, el "self" es el auto. Entonces cuando decimos
self.usar_gasolina()
estamos diciendo
car.usar_gasolina()
indirectamente, ya que el "self" en este caso es el auto.
Lo importante de entender sobre esto es que es un mecanismo del concepto de programación orientada a objetos. El self/auto siendo el objeto, y use_gas() siendo el método llamada en el objeto.
Podemos ver esto a través de otro ejemplo. Si tuviéramos un objeto lámpara, esa lámpara podría tener alguna función que pueda usar en sí misma llamada "light_up".
Pero podríamos tener muchos tipos de lámparas, pequeñas, que cuelguen del techo, que estén montadas en las paredes, etc.
Lo que querríamos es que todas estas lámparas tengan la capacidad común de usar nuestra función "light_up". Entonces crearíamos una estructura orientada a objetos en la que las lámparas puedan tener alguna variación en características distintas, pero todas accedan a la función "light_up" a través de la estructura genérica de object.
Aquí es donde entra la palabra clave self. Podemos usar esta estructura genérica para hacer referencia al objeto de manera flexible y permitir que todas esas variaciones únicas de la lámpara usen esta misma función. Esto es lo mismo que en el caso de tu auto. En el código a continuación verás que defino una función light_up para algunos objetos de clase lámpara que cambiarán un valor booleano para ese objeto e imprimirán algo de texto haciendo referencia al nombre del objeto.
def light_up(self):
self.light_on = Verdadero
print(f¡La lámpara {self.colour} de tamaño {self.size} fue encendida!)
El resultado de esto se destacaría mejor mostrando cómo se compilaría en dos instancias diferentes. Para hacer esto, construiremos la clase lámpara y generaremos algunas instancias para ver cómo interactuarían.
class Lamp:
def __init__(self, tamaño, colour, light_on = False):
# Observe cómo el constructor aquí establece por defecto nuestra variable light_on en False
self.colour = colour
self.tamaño = tamaño
self.light_on = light_on
# Nuestra función light_up existiría dentro de la clase, ya que es parte de la estructura del objeto
def light_up(self):
self.light_on = Verdadero
print(f¡La lámpara {self.colour} de tamaño {self.size} fue encendida!)
# Ahora que estamos fuera de la clase debido a nuestra indentación, podemos crear algunos ejemplos y probarlos.
bedside_lamp = Lamp(medium, cream)
desk_lamp = Lamp(Large, White)
# Las dos líneas anteriores ahora han construido dos objetos de nuestra clase Lamp
# De aquí podemos finalmente usar nuestros métodos
bedside_lamp.light_up() # Observe que la palabra clave self no necesita ser mencionada en la llamada de función
desk_lamp.light_up()
Del código anterior, creamos nuestra clase Lamp, le damos algunos atributos colour, size y light_on. Luego podemos usar una función asignada al objeto. La salida resultante a la consola (asumiendo que no he cometido errores en esto) sería:
The medium cream lamp was turned on!
The Large White lamp was turned on!
Espero que esto aclare un poco la confusión sobre cómo funcionan los objetos. Si deseas que se aclare algo, no dudes en responder.
Chris Freeman
68,469 puntosChris Freeman
68,469 puntosExcelente respuesta Samuel Tredgett! Tu comentario ha sido movido a respuesta.