Вы когда-нибудь задумывались, чем на самом деле являются привычные нам print, str или enumerate? Мы привыкли называть их «функциями», потому что мы их вызываем через круглые скобки.
Но в Python всё немного интереснее.
Попробуйте угадать, что из этого функция, а что — класс:
1. print()
2. str()
3. list()
4. sum()
Проверяем:
1. print — (Функция)
2. str — (Класс!)
3. list — (Тоже класс)
4. sum — (Функция)
В Python и функции, и классы являются callable (вызываемыми) объектами.
Когда мы вызываем функцию, мы запускаем её код, чтобы она что-то сделала или вернула результат.
Когда мы вызываем класс, мы создаем его новый экземпляр (instance).
Например, вызывая str(4), мы технически создаем новый объект класса str. Но в повседневной речи мы почти всегда говорим «функция str». И это абсолютно нормально!
🦆 Утиная типизация в деле
То, что мы называем классы функциями — это классический пример duck typing:
«Если это выглядит как утка и крякает как утка, то это утка».
Для нас как для разработчиков часто неважно, как реализован инструмент «под капотом». Если мы можем его вызвать через (), значит для нас это функция.
Даже сама функция type() — это на самом деле класс!
>>> type
<class 'type'>
Но согласитесь, фраза «я вызвал класс type, чтобы узнать тип объекта» звучит максимально странно.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека питониста
#буст
