Программа курса:
Полиморфизм в Python
Что такое полиморфизм?
Полиморфизм — это концепция в программировании, происходящая от греческих слов "poly" (много) и "morphism" (форма), что означает "множество форм". Полиморфизм позволяет использовать одну и ту же сущность (операцию, функцию, метод, объект) для разных типов данных, что делает код более универсальным и интуитивно понятным.
.jpg)
Полиморфизм через операции
В Python полиморфизм можно увидеть в операциях, где один и тот же оператор может выполнять разные действия в зависимости от типов операндов.
Пример: Оператор сложения
Оператор +
демонстрирует полиморфизм:
# Сложение целых чисел
num1 = 3
num2 = 4
print(num1 + num2) # Вывод: 7
# Конкатенация строк
str1 = "Hello, "
str2 = "World!"
print(str1 + str2) # Вывод: Hello, World!
# Сложение списков
list1 = [1, 2]
list2 = [3, 4]
print(list1 + list2) # Вывод: [1, 2, 3, 4]
Полиморфные функции
Некоторые функции в Python могут принимать аргументы различных типов. Это позволяет им работать с разными данными, предоставляя при этом специфический результат.
Пример: Функция len()
Функция len()
может принимать различные типы данных:
print(len("Hello")) # Вывод: 5 (строка)
print(len([1, 2, 3, 4, 5])) # Вывод: 5 (список)
print(len({"a": 1, "b": 2})) # Вывод: 2 (словарь)
print(len((1, 2, 3))) # Вывод: 3 (кортеж)
Полиморфизм в методах классов
Полиморфизм также можно наблюдать в методах классов, где различные классы могут иметь методы с одинаковыми именами, но с разной реализацией.
Пример: Классы Cat
и Dog
Рассмотрим два класса, Cat
и Dog
, которые имеют методы с одинаковыми именами:
class Cat:
def __init__(self, name):
self.name = name
def info(self):
print(f"I am a cat named {self.name}.")
def make_sound(self):
print("Meow")
class Dog:
def __init__(self, name):
self.name = name
def info(self):
print(f"I am a dog named {self.name}.")
def make_sound(self):
print("Bark")
# Создаем экземпляры классов
cat_obj = Cat("Whiskers")
dog_obj = Dog("Rover")
# Обработка объектов разных типов
for animal in (cat_obj, dog_obj):
animal.make_sound() # Вывод: Meow, Bark
animal.info() # Вывод: I am a cat named Whiskers. / I am a dog named Rover.
Утиная типизация
В языках программирования с динамической типизацией, таких как Python, переменные могут принимать значения разных типов, и для работы с объектами одного типа нет строгих требований.
Концепция утиной типизации
"Если что-то выглядит как утка, плавает как утка и крякает как утка, то, вероятно, это утка." Это выражение иллюстрирует идею, что для работы с объектами важнее их поведение, чем их точный тип.
Пример: Утиная типизация
Рассмотрим класс Duck
и класс RoboticBird
, которые имеют похожие методы:
class Duck:
def swim(self):
print("Duck swims.")
def quack(self):
print("Duck quacks.")
class RoboticBird:
def swim(self):
print("Robotic bird swims.")
def quack(self):
print("Robotic bird mimics a quack.")
def duck_testing(duck):
duck.swim()
duck.quack()
# Создаем экземпляры
duck = Duck()
robotic_bird = RoboticBird()
# Проверяем утиную типизацию
duck_testing(duck) # Вывод: Duck swims. Duck quacks.
duck_testing(robotic_bird) # Вывод: Robotic bird swims. Robotic bird mimics a quack.
Вот таблица по лекции о полиморфизме через операции:
Тема | Описание |
---|---|
Полиморфизм через операторы | Один и тот же оператор выполняет разные действия в зависимости от типов операндов. |
Оператор сложения (+ ) | - Сложение чисел: 3 + 4 = 7 - Конкатенация строк: "Hello" + "World" = "Hello, World!" - Сложение списков: [1, 2] + [3, 4] = [1, 2, 3, 4] |
Полиморфные функции | Некоторые функции могут работать с разными типами данных, предоставляя специфический результат для каждого типа. |
Функция len() | Возвращает длину объектов разных типов: - Строка: len("Hello") = 5 - Список: len([1, 2, 3]) = 3 - Словарь: len({"a": 1}) = 1 |
Полиморфизм в методах классов | Разные классы могут иметь методы с одинаковыми именами, но с разной реализацией. |
Пример с классами Cat и Dog | Оба класса имеют методы info() и make_sound() , но они выполняют разные действия для каждого объекта класса. |
Утиная типизация | Важнее поведение объекта, чем его точный тип. Если объект выглядит и ведёт себя как ожидается, то его тип не имеет значения. |
Концепция утиной типизации | "Если что-то выглядит как утка и ведёт себя как утка, то это утка". |
Пример с классами Duck и RoboticBird | Оба класса имеют методы swim() и quack() , которые вызываются одинаково, несмотря на разные типы объектов. |
Таблица отражает основные аспекты полиморфизма и утиной типизации в Python.
Полиморфизм — это мощный инструмент, позволяющий делать код более гибким и удобным. Он позволяет использовать одни и те же операции и методы с разными типами данных, что улучшает читабельность и поддержку кода. Утиная типизация дополняет эту концепцию, позволяя разработчикам сосредоточиться на поведении объектов, а не на их типах.
Комментарии
Ограниченный доступ
Вы можете только просматривать лекции, так как данный курс является платным. Чтобы получить полный доступ к курсу, приобретите его!