Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trial

Benjamin Cha
3,287 PointsNameError: name "Book" is not defined
class Book: def init(self, author, title): self.author = author self.title = 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
The error NameError: name "Book" is not defined keeps persisting in my code. I am stuck on the 2nd challenge out of 3. Can somebody please give me an answer as soon as possible?
Ben
class Book:
def __init__(self, author, title):
self.author = author
self.title = 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
from book import Book
class BookCase:
def __init__(self):
self.books = []
def add_books(self, book):
self.books.append(book)
1 Answer

Rohald van Merode
Treehouse StaffHey Benjamin Cha 👋
When the __eq__
method tries to execute isinstance(other, Book)
, it's attempting to reference the Book
class, but since you're still in the middle of defining the class, Book
is not yet fully defined, causing this NameError.
To fix this you can remove the isinstance
call and simply return the conditional:
class Book:
def __init__(self, author, title):
self.author = author
self.title = title
def __str__(self):
return f'{self.author}, {self.title}'
def __eq__(self, other):
return self.author == other.author and self.title == other.title
Benjamin Cha
3,287 PointsBenjamin Cha
3,287 PointsThank you for helping me! I cleared the challenge! :)