📋 Формулировка задания
Исходное задание из LMS:
-
Класс Person. Создайте класс
Person, представляющий человека. Каждый человек должен иметь имя. Добавьте методintroduce(), который выводит приветствие с именем.Hello, my name is Alice. -
Класс Student. На основе класса
Personсоздайте классStudent. Студент должен иметь имя и номер курса. Методintroduce()должен сначала выводить базовое приветствие, а затем строку:I'm on course <номер_курса>.Hello, my name is Alice. I'm on course 2. -
Класс 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, единая история, легко переключаться между уроками.
Создайте (или откройте) рабочую папку
В VS Code нажмите Ctrl+K Ctrl+O → выберите или создайте папку python-fundamentals-practice. Это будет корень вашего учебного репозитория.
# Или в терминале VS Code (Ctrl + `):
mkdir python-fundamentals-practice
cd python-fundamentals-practice
Инициализируйте 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: базовая структура репозитория"
Создайте папку для текущего урока
mkdir -p lesson-70
cd lesson-70
Создайте виртуальное окружение (venv)
# Windows
python -m venv venv
venv\Scripts\activate
# Mac / Linux
python3 -m venv venv
source venv/bin/activate
После активации в начале строки терминала появится (venv).
Создайте ветку для задания
cd ..
git checkout -b lesson/70-inheritance-polymorphism
# Если настроен удалённый репозиторий:
git push -u origin lesson/70-inheritance-polymorphism
🛠️ Шаги выполнения задания
Создайте файл people.py
В папке lesson-70 создайте файл people.py.
Реализуйте классы
Добавьте базовый класс Person и наследников Student и Teacher. Используйте super(), чтобы переиспользовать логику базового приветствия.
Создайте список и вызовите 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
🧪 Как проверить решение
- Активируйте venv:
venv\Scripts\activate(Windows) илиsource venv/bin/activate(Mac/Linux). - Запустите файл:
python lesson-70/people.py. - Убедитесь, что в терминале нет ошибок и вывод совпадает с ожидаемым.
- Попробуйте добавить в список ещё один
StudentилиTeacherи проверьте полиморфный вызов.
🐛 Отладка в VS Code
Если что-то не работает:
- Поставьте точку останова (breakpoint) в
__init__илиintroduce(). - Нажмите F5 или выберите «Run → Start Debugging».
- В панели Debug посмотрите значения
self.name,self.courseиself.subject. - Проверьте 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не появится.