🏠 Домашнее задание

⚡ Суть задания

Создать класс Person с методом introduce(), классы Student и Teacher, наследующие от Person, и вызвать introduce() полиморфно для списка людей.

Результат: файл people.py, который можно запустить и увидеть ожидаемый вывод.

📋 Формулировка задания

Исходное задание из LMS:

  1. Класс Person. Создайте класс Person, представляющий человека. Каждый человек должен иметь имя. Добавьте метод introduce(), который выводит приветствие с именем.
    Hello, my name is Alice.
  2. Класс Student. На основе класса Person создайте класс Student. Студент должен иметь имя и номер курса. Метод introduce() должен сначала выводить базовое приветствие, а затем строку: I'm on course <номер_курса>.
    Hello, my name is Alice.
    I'm on course 2.
  3. Класс Teacher и список людей. На основе класса Person создайте класс Teacher. У преподавателя есть имя и предмет. Метод introduce() должен выводить строку: Hello, I am professor <имя>. My subject is <предмет>. Создайте список, в котором будут Student и Teacher, и вызовите у всех метод introduce().
    Hello, my name is Alice.
    I'm on course 2.
    Hello, I am professor Bob.
    My subject is Mathematics

🔧 Шаг 0. Подготовка окружения

Перед началом работы над любым заданием курса нужно настроить окружение. Эти шаги одинаковы для всех уроков.

📁 Структура репозитория: мы используем один репозиторий для всех практических работ курса. Это удобнее, чем десятки отдельных репозиториев: общий .gitignore, единая история, легко переключаться между уроками.
1

Создайте (или откройте) рабочую папку

В VS Code нажмите Ctrl+K Ctrl+O → выберите или создайте папку python-fundamentals-practice. Это будет корень вашего учебного репозитория.

# Или в терминале VS Code (Ctrl + `):
mkdir python-fundamentals-practice
cd python-fundamentals-practice
2

Инициализируйте Git-репозиторий (один раз)

git init

echo "# Python Fundamentals — Практические работы" > README.md
echo "venv/" > .gitignore
echo "__pycache__/" >> .gitignore
echo "*.pyc" >> .gitignore
echo ".env" >> .gitignore

git add README.md .gitignore
git commit -m "init: базовая структура репозитория"
3

Создайте папку для текущего урока

mkdir -p lesson-70
cd lesson-70
4

Создайте виртуальное окружение (venv)

# Windows
python -m venv venv
venv\Scripts\activate

# Mac / Linux
python3 -m venv venv
source venv/bin/activate

После активации в начале строки терминала появится (venv).

5

Создайте ветку для задания

cd ..
git checkout -b lesson/70-inheritance-polymorphism

# Если настроен удалённый репозиторий:
git push -u origin lesson/70-inheritance-polymorphism

🛠️ Шаги выполнения задания

1

Создайте файл people.py

В папке lesson-70 создайте файл people.py.

2

Реализуйте классы

Добавьте базовый класс Person и наследников Student и Teacher. Используйте super(), чтобы переиспользовать логику базового приветствия.

3

Создайте список и вызовите introduce()

Поместите объекты Student и Teacher в один список и в цикле вызовите у каждого introduce().

✅ Полное решение

Ниже приведено полное решение задания. Совет: попробуйте выполнить самостоятельно, прежде чем смотреть ответ.

class Person:
    def __init__(self, name: str) -> None:
        self.name = name

    def introduce(self) -> None:
        print(f"Hello, my name is {self.name}.")


class Student(Person):
    def __init__(self, name: str, course: int) -> None:
        super().__init__(name)
        self.course = course

    def introduce(self) -> None:
        super().introduce()
        print(f"I'm on course {self.course}.")


class Teacher(Person):
    def __init__(self, name: str, subject: str) -> None:
        super().__init__(name)
        self.subject = subject

    def introduce(self) -> None:
        print(f"Hello, I am professor {self.name}.")
        print(f"My subject is {self.subject}")


people = [
    Student("Alice", 2),
    Teacher("Bob", "Mathematics"),
]

for person in people:
    person.introduce()

Ожидаемый вывод:

Hello, my name is Alice.
I'm on course 2.
Hello, I am professor Bob.
My subject is Mathematics

🧪 Как проверить решение

  1. Активируйте venv: venv\Scripts\activate (Windows) или source venv/bin/activate (Mac/Linux).
  2. Запустите файл: python lesson-70/people.py.
  3. Убедитесь, что в терминале нет ошибок и вывод совпадает с ожидаемым.
  4. Попробуйте добавить в список ещё один Student или Teacher и проверьте полиморфный вызов.

🐛 Отладка в VS Code

Если что-то не работает:

  1. Поставьте точку останова (breakpoint) в __init__ или introduce().
  2. Нажмите F5 или выберите «Run → Start Debugging».
  3. В панели Debug посмотрите значения self.name, self.course и self.subject.
  4. Проверьте Terminal на наличие traceback — Python показывает номер строки с ошибкой.

💾 Сохранение работы

git add lesson-70/
git commit -m "lesson-70: Person, Student, Teacher with inheritance and polymorphism"
git push

💡 Советы и типичные ошибки

  • Убедитесь, что venv активирован перед запуском.
  • Не коммитьте папку venv/ — она указана в .gitignore.
  • В Student.introduce() вызовите super().introduce(), чтобы сначала вывести базовое приветствие.
  • Не забудьте передать имя в super().__init__(name), иначе атрибут name не появится.
Проверить по документации: аннотации типов в примере выходят за рамки исходного задания. Подробнее см. typing и PEP 484.