"""
Read the description of subclass InventoryRoster below, and then add a str
method, including a docstring, to subclass InventoryRoster. You do not need
examples in this docstring. Your str method should be used to display a list of
all items.

Assume InventoryRoster.add() takes a list in the form [item number, description,
category] where item number is an int.

Context: an inventory system.
An inventory tracks items that are for sale, each one at its own price. Items
are identified by their item number, and they also have a text description, such
as "bath towel". There are categories that items belong to, such as "housewares"
and "books". We must be able to display a list of all items where each line of
the list has the following format:
Item Number: <item number>, Description: <description>, Category: <category>
"""

class Roster:
    """
    Represents a roster of members.
    @param dict members: represents this roster’s members
    """
    def __init__(self):
        """
        Initialize new roster self.
        @param Roster self: this Roster
        @rtype: None
        """
        self.members = {}

    def add(self, member):
        """
        Add member to roster self.
        @param Roster self: this Roster
        @param tuple member: member record to add
        @rtype: None
        Assume:
        -- member is a tuple with member[0] not in self.members,
        -- len(member) > 1
        """
        self.members[member[0]] = member[1:]

    def remove(self, member):
        """
        Remove member from roster self.
        @param Roster self: this Roster
        @param tuple member: member record to be removed
        @rtype: None
        Assume:
        --member is a tuple with member[0] in self.members
        --len(member) > 1
        """
        del(self.members[member[0]])

    def __str__(self):
        """
        Return a string representation of the members of roster self.
        @param Roster self: this Roster
        @rtype: str
        """
        raise NotImplementedError

class InventoryRoster(Roster):
    """
    Represents a roster of inventory items.
    """

    def __str__(self):
        """
        Return a string representation of the members of InventoryRoster self.

        @param InventoryRoster self: this InventoryRoster
        @rtype str
        """
        ret_str = ""
        for number in self.members:
            (desc, category) = self.members[number]
            ret_str += ("Item Number: {}, Description: {}, " +
                        "Category: {}\n").format(str(number), desc, category)

        return ret_str[:-1] # Remove the last newline
