Доброго времени суток, читатели, зрители моего канала programmer's notes.
Приложение 1 к видеоуроку
Полиморфизм функций
Темы полиморфизма функций я вскользь коснулся в своё видеоуроке. Так что этот текст ничего не дублирует и не развивает, а является в сущности новым материалом.
Полиморфизм функций в Python можно разделить на две части: полиморфизм встроенных глобальных функций и программно реализуемый полиморфизм.
В первом случае это касается почти всех глобальных функций. Рассмотрим такой пример
s = 'qwerty'
ls = [4, 'wer', 67.4]
st = {5, 7, 8, 4, 1}
print(len(s), len(ls), len(st))
Результат выполнения фрагмента
6 3 5
Заметим, что у нас есть три совершенно разных объекта: строка, список и множество. Но функция len() сработала для всех трёх и вычислила количество элементов в каждом из них. Это и есть полиморфизм: функция по-разному реагирует на разные типы данных.
Еще один пример полиморфной функции это int(). Функция преобразует объект к целому типу, если это возможно. Она может применяться и к типу строка и к вещественным числам, да и целым числам. В последнем случае, правда, она оставляет число без изменения.
В Python есть и такая функция как eval(), которая вычисляет целые выражения, записанные по правилам Python.
a = 10
b = 'qwer'
print(eval('b * 10'))
Результат выполнения
qwerqwerqwerqwerqwerqwerqwerqwerqwerqwer
Здесь полиморфизм заключается в том, что эта функция вычисляет любые 'правильные' выражения, вне зависимости от того, какой тип результата должен получиться.
Разумеется, мы можем сами написать функцию, которая в зависимости от входных параметров выполнять разные действия. Но было бы интереснее изменить какую-то уже существующую в Python функцию. Тем более, что в Python легко "подменить" одну функцию другой.
Вот в качестве такой функции мы возьмём хорошо вам известную input(). Покажем, как в ходе выполнения программы, она может менять свою функциональность. Точнее мы программируем её функциональность.
Ниже представлена программа, которая на ввод даты, например, в форме 12.8.2001 будет выдавать 12 августа 2003г. Причем учитываются несколько разных разделителей.
В программе нет ничего сложного, кроме одного нюанса. В ней есть подмена: input() подменяется другой функцией - get_date(). А внутри последней функции input() возвращается к своему истинному смыслу. Что это, как ни полиморфизм в чистом виде.
Замечание
Кстати программу желательно доработать. Желательно обрабатывать ошибки, связанные с неправильным форматом вводимой даты. Попробуйте это сделать.
Это первое приложение к видео 8. Будет ещё второе.
Всего наилучшего. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.