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 Emular funciones integradas Emular funciones integradas

Benjamin Cha
Benjamin Cha
4,095 Puntos

NameError: name "Book" is not defined

class Book: init(self, author, title):

def __str__(self):
    return f"{self.author}, {self.title}"
    personal = Book("John Green", "Paper Towns")

def __eq__(self, other):
    if isinstance(other, Book):
        return self.author == other.author and self.title == other.title
    return False

El error ErrorDeNombre: el nombre "Book" no está definido sigue persistiendo en mi código. Estoy atrapado en el 2º desafío de 3. ¿Puede alguien darme una respuesta lo antes posible?

Ben

book.py
class Libro:
    def __init__(self, autor, title):
        self.autor = autor
        self.title = title

    def __str__(self):
        return f{self.author}, {self.title}
        personal = Libro(John Green, Paper Towns)

    def __eq__(self, otro):
        if isinstance(otro, Libro):
            return self.autor == otro.autor y self.title == otro.title
        return False
bookcase.py
from libro import Libro


class BookCase:
    def __init__(self):
       self.libros = 

    def add_books(self, libro):
        self.libros.append(libro)

1 Respuesta

Hola Benjamin Cha 👋

Cuando el __eq__ método intenta ejecutarse isinstance(other, Book), está intentando hacer referencia a la Book clase, pero como aún está en medio de definir la clase, Book aún no está completamente definido, causando este ErrorDeNombre.

Para solucionar esto, puede eliminar la isinstance llamada y simplemente devolver el condicional:

class Libro:
    def __init__(self, autor, title):
        self.autor = autor
        self.title = title

    def __str__(self):
        return f'{self.author}, {self.title}'

    def __eq__(self, otro):
        return self.autor == otro.autor y self.title == otro.title
Benjamin Cha
Benjamin Cha
4,095 Puntos

¡Gracias por ayudarme! ¡Superé el desafío! :)