Mini Project: Library Management System
Build a library management system using OOP — classes for books, members, and the library. Covers inheritance, encapsulation, and composition.
25 min•By Priygop Team•Updated 2026
Library System
Library System
class Book:
def __init__(self, title, author, isbn):
self.title = title
self.author = author
self.isbn = isbn
self.available = True
def __str__(self):
status = "Available" if self.available else "Checked Out"
return f"'{self.title}' by {self.author} [{status}]"
class Member:
def __init__(self, name, member_id):
self.name = name
self.member_id = member_id
self.borrowed = []
def __str__(self):
return f"{self.name} (ID: {self.member_id}, Books: {len(self.borrowed)})"
class Library:
def __init__(self, name):
self.name = name
self.books = []
self.members = []
def add_book(self, book):
self.books.append(book)
print(f" Added: {book.title}")
def register_member(self, member):
self.members.append(member)
print(f" Registered: {member.name}")
def checkout(self, member, book):
if book.available:
book.available = False
member.borrowed.append(book)
print(f" {member.name} borrowed '{book.title}'")
else:
print(f" '{book.title}' is not available!")
def return_book(self, member, book):
if book in member.borrowed:
book.available = True
member.borrowed.remove(book)
print(f" {member.name} returned '{book.title}'")
def display_catalog(self):
print(f"\n=== {self.name} Catalog ===")
for book in self.books:
print(f" {book}")
# Demo
lib = Library("City Library")
b1 = Book("Python Crash Course", "Eric Matthes", "978-1")
b2 = Book("Clean Code", "Robert Martin", "978-2")
b3 = Book("The Pragmatic Programmer", "Hunt & Thomas", "978-3")
lib.add_book(b1)
lib.add_book(b2)
lib.add_book(b3)
alice = Member("Alice", "M001")
bob = Member("Bob", "M002")
lib.register_member(alice)
lib.register_member(bob)
lib.display_catalog()
print("\n--- Transactions ---")
lib.checkout(alice, b1)
lib.checkout(bob, b2)
lib.checkout(bob, b1) # Already checked out!
lib.display_catalog()
lib.return_book(alice, b1)
lib.display_catalog()Tip
Tip
Use composition (Library HAS books) for 'has-a' relationships and inheritance (Dog IS Animal) for 'is-a' relationships.
Diagram
Loading diagram…
Classes are syntactic sugar over prototypes.
Common Mistake
Warning
Over-using inheritance. Not everything needs a class hierarchy. Sometimes a simple dict or function is cleaner.
Practice Task
Note
(1) Add a search_by_author method. (2) Add overdue tracking with dates. (3) Limit max books per member.