СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Методическая разработка «Полиморфизм в Python»

Категория: Информатика

Нажмите, чтобы узнать подробности

Просмотр содержимого документа
«Методическая разработка «Полиморфизм в Python»»

МУНИЦИПАЛЬНОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ДОПОЛНИТЕЛЬНОГО ОБРАЗОВАНИЯ

«ЦЕНТР ДЕТСКОГО ТЕХНИЧЕСКОГО ТВОРЧЕСТВА»













Методическая разработка

«Полиморфизм в Python»

к дополнительной общеобразовательной

общеразвивающей программе

технической направленности

«Программирование на Python»



Возраст детей: 10-17 лет









Автор: Костычев Вадим Александрович











г. Заречный Пензенской области

2025 г.

Данный материал предназначен для преподавателей информатики, программирования и студентов (учащихся), изучающих язык программирования Python. Он может быть использован как на лекциях, так и при проведении практических занятий или самостоятельной работе.


Цель: сформировать у учащихся понимание принципа полиморфизма как одного из ключевых механизмов объектно-ориентированного программирования и показать его проявления в языке Python — от перегрузки операторов до утиной типизации.


Задачи:

  1. Познакомить с понятием полиморфизма и его значением в проектировании программ.

  2. Показать различные формы полиморфизма в Python: в операциях, встроенных функциях, методах классов.

  3. Объяснить суть утиной типизации и её роль в динамически типизированных языках.

  4. Научить использовать полиморфизм для написания гибкого, расширяемого и читаемого кода.

  5. Сформировать умение проектировать классы, совместимые по интерфейсу, без жёсткой привязки к типу.


Что такое полиморфизм?


Слово «полиморфизм» происходит от греческих poly («много») и morphism («форма»). В программировании это означает: одна и та же операция или интерфейс может применяться к объектам разных типов, вызывая разное, но соответствующее поведение.


Полиморфизм делает код более универсальным, гибким и ближе к естественному мышлению: «если объект умеет делать Х — он подходит для задачи Х».


Полиморфизм в операциях


Один из самых наглядных примеров — оператор +.


# Для чисел — сложение

print(3 + 5) # 8


# Для строк — конкатенация

print("Hello, " + "world!") # Hello, world!


# Для списков — объединение

print([1, 2] + [3, 4]) # [1, 2, 3, 4]


Один и тот же символ + вызывает разные действия в зависимости от типов операндов. Это — полиморфное поведение, реализованное через магические методы (__add__, __radd__ и др.).


Полиморфные встроенные функции


Некоторые функции Python работают с множеством типов, адаптируя своё поведение под каждый из них.


Пример — функция len():


print(len("Python")) # 6 — количество символов

print(len([1, 2, 3])) # 3 — количество элементов

print(len({"a": 1, "b": 2})) # 2 — количество ключей


Функция len() не проверяет тип объекта. Она просто запрашивает у объекта его длину, вызывая метод __len__(). Главное — чтобы объект его реализовывал.


Полиморфизм в методах классов


Классы, не связанные наследованием, могут иметь методы с одинаковыми именами. Это позволяет обрабатывать их единообразно.


class Circle:

def draw(self):

print("Рисую круг")


class Square:

def draw(self):

print("Рисую квадрат")


shapes = [Circle(), Square()]

for shape in shapes:

shape.draw()


Вывод:


Рисую круг

Рисую квадрат


Несмотря на то что объекты разных классов, они единообразно обрабатываются, потому что реализуют один и тот же интерфейс (draw()).


Утиная типизация (Duck Typing)

В Python тип объекта определяется не по его классу, а по его поведению. Это выражается известной максимой: «Если что-то ходит как утка, плавает как утка и крякает как утка — значит, это утка».


class Duck:

def quack(self):

print("Кря-кря!")


class RobotDuck:

def quack(self):

print("Механическое кря-кря!")


def make_it_quack(animal):

animal.quack()


make_it_quack(Duck()) # Кря-кря!

make_it_quack(RobotDuck()) # Механическое кря-кря!


Функция make_it_quack не проверяет, является ли аргумент «настоящей уткой». Она просто вызывает метод quack(). Если метод есть — всё работает. Если нет — будет ошибка. Такой подход лежит в основе гибкости Python.


Практическая значимость

Полиморфизм позволяет:

  • писать функции и алгоритмы, работающие с разными типами без модификации;

  • легко расширять программы — достаточно реализовать ожидаемый интерфейс;

  • избегать избыточных проверок типов (isinstance, type);

  • строить гибкие архитектуры, особенно в библиотеках и фреймворках.


Вопросы для самопроверки:


Вопрос 1.
Что означает термин «полиморфизм» в программировании?

A) Возможность объекта иметь несколько имён
B) Способность одной и той же операции или функции работать с объектами разных типов
C) Наличие у класса нескольких родителей
D) Автоматическое преобразование одного типа данных в другой


Вопрос 2.
Какой из следующих фрагментов — пример полиморфизма в Python?


A)

x = 5

y = str(x)


B)

print(len("abc"))

print(len([1, 2, 3]))


C)

def add(a, b):

return a + b


D)

class A: pass

class B(A): pass


Вопрос 3.
Что такое «утиная типизация»?

A) Проверка типа объекта с помощью функции type()
B) Использование только встроенных типов данных
C) Подход, при котором важен не тип объекта, а наличие у него нужных методов и поведения
D) Способ создания классов-наследников от базового класса «Duck»


Вопрос 4.
Какой из следующих вариантов НЕ является проявлением полиморфизма?

A) Оператор + складывает числа и конкатенирует строки
B) Функция print() принимает аргументы любых типов
C) Использование цикла for для перебора элементов списка
D) Метод draw() вызывается у объектов разных классов, не связанных наследованием


Вопрос 5.
Какая фраза лучше всего отражает суть утиной типизации?

A) «Типы данных должны быть строго определены на этапе компиляции»
B) «Если объект реализует нужные методы, он подходит для задачи — независимо от его класса»
C) «Каждый класс должен наследоваться от базового интерфейса»
D) «Все объекты должны быть одного типа для обработки в одной функции»


Заключение


Полиморфизм в Python — это не формальное требование, а естественное следствие динамической типизации и протокола объектов. Он проявляется везде: от простых операторов до сложных систем. Понимание полиморфизма и утиной типизации — ключ к написанию идиоматичного, гибкого и поддерживаемого кода на Python.