Implement Director awards with Python OOP

Read the full interview experience this question came from →

Quick Overview

This question evaluates proficiency in Python object-oriented programming, specifically correct use of @property, @classmethod, and @staticmethod, safe handling of mutable defaults and encapsulation of internal state, and design decisions around equality and hashing.

Implement Director awards with Python OOP

Company: HBO

Role: Data Scientist

Category: Coding & Algorithms

Difficulty: medium

Interview Round: Online Assessment

You are given a simple hierarchy where Director extends Cast. Implement a robust, testable solution that avoids common Python pitfalls and demonstrates correct use of @property, @classmethod, and @staticmethod. Starting point: class Cast: def __init__(self, actors: list[str]): self.actors = list(actors) class Director(Cast): def __init__(self, name: str, actors: list[str], movies: list[str]): super().__init__(actors) self.name = name self.movies = list(movies) self._awards: list[tuple[str,int]] = [] # (award_name, year) Tasks: 1) Implement add_award(award_name: str, year: int) that appends a new (award_name, year) pair only if it does not already exist for this director (idempotent). Ensure no mutable-default arguments and that self._awards cannot be mutated from outside the class. 2) Add a property awards that returns an immutable, chronologically sorted view of awards; add a property latest_award that returns Optional[tuple[str,int]]. 3) Add a @staticmethod validate_award(award_name: str, year: int) that raises ValueError for empty names or years outside [1900, current_year]. Use it inside add_award. 4) Add a @classmethod from_filmography(cls, name: str, filmography: dict) that constructs a Director from {'actors': [...], 'movies': [...]}. Show how subclassing would work if you later create an AwardWinningDirector that adds fields like guild_membership. 5) Implement __eq__ and __hash__ so that two Director instances with the same name compare equal. Explain the trade-offs of this choice. 6) Provide a short doctest-style example demonstrating creation, adding duplicate awards, and the latest_award property.

Overview: This question evaluates proficiency in Python object-oriented programming, specifically correct use of @property, @classmethod, and @staticmethod, safe handling of mutable defaults and encapsulation of internal state, and design decisions around equality and hashing.

Read the full HBO Data Scientist interview experience this question came from

HBO logo
HBO
Oct 13, 2025
mediumData ScientistOnline AssessmentCoding & Algorithms
3
0

Python OOP Exercise: Director extends Cast

Context

You are working with a simple class hierarchy where Director extends Cast. Implement a robust, testable Python solution that uses @property, @classmethod, and @staticmethod correctly, and avoids common pitfalls such as mutable defaults and leaking internal mutable state.

Starting point:

class Cast:
    def __init__(self, actors: list[str]):
        self.actors = list(actors)

class Director(Cast):
    def __init__(self, name: str, actors: list[str], movies: list[str]):
        super().__init__(actors)
        self.name = name
        self.movies = list(movies)
        self._awards: list[tuple[str,int]] = []  # (award_name, year)

Tasks

  1. Implement add_award(award_name: str, year: int) that appends a new (award_name, year) pair only if it does not already exist for this director (idempotent). Ensure no mutable-default arguments and that self._awards cannot be mutated from outside the class.
  2. Add a property awards that returns an immutable, chronologically sorted view of awards; add a property latest_award that returns Optional[tuple[str,int]].
  3. Add a @staticmethod validate_award(award_name: str, year: int) that raises ValueError for empty names or years outside [1900, current_year]. Use it inside add_award.
  4. Add a @classmethod from_filmography(cls, name: str, filmography: dict) that constructs a Director from {'actors': [...], 'movies': [...]}. Show how subclassing would work if you later create an AwardWinningDirector that adds fields like guild_membership.
  5. Implement eq and hash so that two Director instances with the same name compare equal. Explain the trade-offs of this choice.
  6. Provide a short doctest-style example demonstrating creation, adding duplicate awards, and the latest_award property.