Kay Ashaolu - Instructor
Aishwarya Sriram - TA
Traditional Approach:
student = {"name": "Rolf", "grades": (90, 88, 87)}
def average(seq):
return sum(seq) / len(seq)
print(average(student["grades"]))
Limitation: Lacks semantic connection between data and behavior
class
keyword to create a blueprint __init__
method initializes instance attributes self
parameter references the instanceclass Student:
def __init__(self):
self.name = "Rolf"
self.grades = (90, 88, 87)
self
class Student:
def __init__(self):
self.name = "Rolf"
self.grades = (90, 88, 87)
def average_grade(self):
return sum(self.grades) / len(self.grades)
student = Student()
print(student.average_grade()) # Outputs: 88.33...
class Device:
def __init__(self, name, connected_by):
self.name = name
self.connected_by = connected_by
self.connected = True
def __str__(self):
return f"device {self.name} {self.connected_by}"
def disconnect(self):
self.connected = False
print("disconnected")
class Printer(Device):
def __init__(self, name, connected_by, capacity):
super().__init__(name, connected_by)
self.capacity = capacity
self.remaining_pages = capacity
def __str__(self):
return f"{super().__str__()} - remaining pages {self.remaining_pages}"
def print_pages(self, pages):
if not self.connected:
print("printer is not connected")
return
print(f"printing {pages} pages")
self.remaining_pages -= pages
class Book:
def __init__(self, title):
self.title = title
def __str__(self):
return f"Book: {self.title}"
class Bookshelf:
def __init__(self, *books):
self.books = books
def __str__(self):
return f"Bookshelf with {len(self.books)} books"
# Example Docker command to run Redis locally:
docker run -p 6379:6379 redis
pip install rq
) import os
from dotenv import load_dotenv
load_dotenv()
def send_user_registration_email(email, username):
# Simulated email sending function
print(f"Sending registration email to {email} for {username}")
import os
import redis
from rq import Queue
from flask import Flask, request, current_app
from tasks import send_user_registration_email
app = Flask(__name__)
connection = redis.from_url(os.getenv("REDIS_URL"))
app.queue = Queue('emails', connection=connection)
@app.route('/register', methods=['POST'])
def register():
# ... (user registration logic)
email = request.form['email']
username = request.form['username']
current_app.queue.enqueue(send_user_registration_email, email, username)
return "User created successfully", 201
# Docker example command:
docker run -w /app rest-api-recording-email sh -c "rq worker -u $REDIS_URL emails"