Define a class Course that can be used to represent courses. Two arguments must be passed when creating a new course (Course): i) the unique identifier (int) of the course and ii) the name (str) of the course.

Define a class Student that can be used to represent students. Four arguments must be passed when creating a new student (Student): i) the unique identifier (int) of the student, ii) the first name (str) of the student, iii) the last name (str) of the student and iv) the date of birth (datetime.date) of the student. Students (Student) must support at least the following methods:

If a course (Course) or a student (Student) is passed to the builtin functions repr or str, the functions must return a string representation (str) of the course or the student that is formatted as in the example below.

Example

>>> astronomy = Course(238273, 'Astronomy')
>>> astronomy
Course(238273, 'Astronomy')
>>> print(astronomy)
Course(238273, 'Astronomy')

>>> import datetime
>>> harry = Student(29839339, 'Harry', 'Potter', datetime.date(1980, 7, 31))
>>> harry
Student(29839339, 'Harry', 'Potter', datetime.date(1980, 7, 31))
>>> print(harry)
Potter, Harry
>>> harry.age()
39
>>> harry.courses()
set()
>>> harry.enroll(charms)
Student(29839339, 'Harry', 'Potter', datetime.date(1980, 7, 31))
>>> harry.courses()
{Course(983448, 'Charms')}
>>> harry.enroll(charms).enroll(dark_arts).enroll(defence_against_dark_arts).courses()
{Course(746473, 'Dark Arts'), Course(983448, 'Charms'), Course(462763, 'Defence Against Dark Arts')}