"""File for Score classes""" import time class Score: """Parent class for Scores. Stores common information for a Score.""" # no user setter, it should never change. def __init__(self, user: str, value: int) -> None: """ Default constructor for Score class. Args: user (str): Score's user value (int): Score's value """ self._user: str = user self._value: int = value def __str__(self) -> str: """ Returns Score class as a string for printing. Returns: str: Score class as a string """ return self.to_str() @property def user(self) -> str: """ Getter for score user. Returns: str: user """ return self._user @property def value(self) -> int: """ Getter for score value. Returns: int: value """ return self._value @value.setter def value(self, value: int) -> None: """ Setter for score value. Args: value (int): score value input """ self._value = value def get_str(self) -> str: """ Gets score's value as string. Returns: str: Score's value """ return str(self._value) def to_str(self) -> str: """ Returns Score object as a string. Returns: str: string of json representation of Score """ return f"{self.user}: {self.get_str()}" class ScoreTime(Score): """Class for a time based score. Inherits from Score.""" def __init__(self, user: str, score: float) -> None: # pylint: disable=super-init-not-called """ Default constructor for ScoreTime class. Args: user (str): Score's user score (float): Score's value """ # store time score as seconds. self._user: str = user self._score: float = score @property def value(self) -> float: """ Getter for score value. Returns: float: value """ return self._score @value.setter def value(self, value: float) -> None: """ Setter for score value. Args: value (float): value """ self._score = value def get_str(self) -> str: """ Gets score's value as string. Turns seconds into MM:SS.ms format. Returns: str: value in time format. """ milliseconds = round((self.value - int(self.value)) * 10) return time.strftime(f"%-M:%S.{milliseconds}", time.gmtime(self.value))