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

Python Python Orientado a Objetos Básico Bienvenido a POO Agregando a nuestro Panda

¡Por favor, puedes ayudarme a identificar dónde está el problema aquí? ¡Gracias!

class Panda:

def __init__(self, name, age):
    self.is_hungry = True
    self.name = name
    self.age = age

def eat(self):
    self.is_hungry = False
    return ("Bao Bao eats {}.".format(food))
panda.py
class Panda:
    especie = 'Ailuropoda melanoleuca'
    comida = 'bamboo'

    def __init__(self, name, edad):
        self.is_hungry = Verdadero
        self.name = name
        self.edad = edad

    def eat(self):
        self.is_hungry = False
        return (Bao Bao eats {}..format(comida))

5 respuestas

Estás devolviendo "Bao Bao" pero necesitas devolver el atributo name. No olvides agregarlo al argumento format también.

Una clase es un plano para crear objetos. ¿Qué pasa si queremos crear otro Panda usando esa clase y ese panda tendrá un nombre diferente, como "Mao Mao" por ejemplo? Entonces el método eat no tendría sentido ya que también diría: "Bao Bao eats ...". Queremos que sea reutilizable para que podamos crear diferentes pandas con diferentes nombres y cuando llamemos al método eat en cualquiera de ellos, dirá el nombre correcto, el nombre con el que inicializamos el objeto :)

¿De dónde y cómo debería declarar el nombre Bao Bao?

¡Gracias por tu ayuda! Este es el código que escribí por ahora

class Panda:

def __init__(self, name, age):
    self.is_hungry = True
    self.name = name
    self.age = age

def eat(self):
    self.is_hungry = False
    name = 'Bao Bao'
    return (f*"{name} eats {food}.")

No necesitas declarar el nombre "Bao Bao" en el método eat. Si entiendo bien, un nuevo objeto panda se crea bajo el capó por el espacio de trabajo de Treehouse algo como esto:

panda1 = Panda(Bao Bao, 10)

...y luego usan el método eat en este nuevo objeto panda, así:

panda1.eat()

El nombre y la edad se pasan al constructor / inicializador cuando se inicializa panda1. Por eso declaramos el nombre y la edad en el def init(self, name, age) cosa - entonces podemos usar estos valores en los métodos (como el método eat).

Con la clase, podemos crear tantos pandas como queramos:

panda1 = Panda(Bao Bao, 10)
panda2 = Panda(Bao Mao, 6)
panda3 = Panda(Mao Mao, 4)
panda4 = Panda(Yao Yao, 3)

Y como mencioné, podemos llamar al método eat() en cualquiera de ellos y dirá el nombre correcto.

Pero me doy cuenta de que la parte confusa es que no inicializamos el objeto nosotros mismos, solo tenemos que crear el plano (clase) para que la máquina de Treehouse pueda usar esa clase para inicializar pandas y verificar si sabemos cómo declarar una clase en Python.

¡Ps! Espero no haber metido la pata con la programación orientada a objetos de Python. Si lo hice, por favor que alguien más inteligente me corrija.

Sí entiendo tu punto, ¡pero aún no puedo hacerlo bien! Esto es lo que he hecho

class Panda:

def __init__(self, name, age):
    self.is_hungry = True
    self.name = name
    self.age = age

def eat(self):
    self.is_hungry = False
    return (f*"{name} eats {food}.")

Panda.eat('Bao, Bao')