In [1]:
import datetime

class Team:
    # Private class fields
    __id = 0            # A private class field that initializes to zero, used for generating unique IDs
    __date = None       # A private class field that stores the date the team object was created
    __name = ""         # A private class field that stores the name of the team
    __type = ""         # A private class field that stores the type of the team (boys/girls)
    __fee_paid = False  # A private class field that stores whether the team has paid their fees
    __fee = 0        # A private class field that stores the amount of fees to be paid by the team

    # Constructor method to create new Team object with the given id, date of creation,
    # name, type, fee status, and fee amount paid

    def __init__(self, name, team_type, fee_paid, fee):
        self.__date = datetime.date.today() # Set the date the team was created to today's date
        self.__name = name                   # Set the name of the team
        self.__type = team_type              # Set the type of the team
        self.__fee_paid = fee_paid          # Set whether the team has paid their fees
        self.__fee = fee                     # Set the fee to be paid by the team
        self.__class__.__id += 1            # Increment the ID counter
        self.__id = self.__class__.__id     # Set the ID of the team to the current ID counter value

    # Defining the accessor methods to return the attributes of Team objects
    @property
    def id(self):
        return self.__id

    def get_date(self):
        return self.__date

    def get_name(self):
        return self.__name

    def get_type(self):
        return self.__type

    def get_fee_paid(self):
        return self.__fee_paid

    def get_fee(self):
        return self.__fee

    # Defining the mutator methods to set the attributes of Team object

    def set_name(self, name):
        self.__name = name

    def set_type(self, team_type):
        self.__type = team_type

    def set_fee_paid(self, fee_paid):
        self.__fee_paid = fee_paid

    def set_fee(self, fee):
        self.__fee = fee

    # String representation methods for listing the team details
    def __str__(self):
        return f"Team ID: {self.__id}\nDate created: {self.__date}\nTeam name: {self.__name}\nTeam type: {self.__type}\nFee paid: {self.__fee_paid}\nFee paid: {self.__fee}\n"

    def __repr__(self):
        return self.__str__()