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

¿Qué hay de malo en mi código, por favor?

He establecido "Bao Bao" en self.name. ¿Pero por qué el sistema me dice que no funciona?

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.name = 'Bao Bao '
        self.is_hungry = False
        return f'{self.name} eats {self.food}'

4 respuestas

Chris Freeman
Chris Freeman
68,469 puntos

Hola diginoma, el eat() el método está anulando el self.name atributo. Elimina la asignación a self.name dentro eat()

Como está ahora, es "Boa Boa come"... todo el tiempo

Publica de nuevo si necesitas más ayuda. ¡Buena suerte!

Lo resolví

Puse el código en la posición correcta :-)

¡Gracias!

estoy teniendo un problema similar...

Traceback (most recent call last):

  • Bao Bao come bayas.
  • Charles come bayas.

¿cuál es el problema real aquí?

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.name = 'Bao Bao'
        self.is_hungry = False
        return f'{self.name} eats {self.food}.'
Chris Freeman
Chris Freeman
68,469 puntos

Hola diginoma, el eat() el método está anulando el self.name atributo. Elimina la asignación a self.name dentro eat()

Como está ahora, es "Boa Boa come"... todo el tiempo

Publica de nuevo si necesitas más ayuda. ¡Buena suerte!

Para esto, lo que terminé haciendo es llamar la clase dentro del método eat y pasar el argumento name en lugar de definirlo en el método. De esa manera podrías cambiarla en cada instancia separada en lugar de que el nombre sea siempre Bao Bao cada vez que llamas al método eat.

Chris Freeman
Chris Freeman
68,469 puntos

Hola Gunter Ostendorp, es el __init__ método que establece los self.name atributo de las instancias para que el nombre esté disponible y sea único para esa instancia. Pasar un nombre simplemente anularía el atributo de instancia y requeriría que el código que llama mantenga un registro del nombre fuera de la clase. Esto va en contra del propósito de tener el atributo name.

Responde si hay algo más que no estoy viendo. ¡Buena suerte!

¡¡¡ohhhh! bueno, ahora que lo planteas así ¡lo entiendo! ¡Gracias!