Skip to content

Factory Pattern

people.csv

Alice Smith,60,Harvard University,History
Michael Smith,27,Princeton University,Mechanical Engineering
Bob Davis,43,Yale University,Biology
class Person:
    def __init__(self, name, age, university, degree):
        self.name = name.title()
        self.age = age
        self.university = university.title()
        self.degree = degree.capitalize()

    @classmethod
    def from_csv_line(cls, line: str) -> "Person":
        return cls(*line.strip().split(","))


with open("people.csv", "r") as rf:
    lines = rf.readlines()

people = map(Person.from_csv_line, lines)

for person in people:
    print(
        f"{person.name} is {person.age},"
        f"studying {person.degree} at {person.university}."
    )