Python полностью поддерживает ООП?
"Честное слово, я и не подозревал, что вот уже более сорока лет говорю прозой"
(Мещанин во дворянстве, Жан-Батист Мольер).
Давайте вспомним основные принципы ООП. Наследование, инкапсуляция и полиморфизм.
С наследованием, думаю, все понятно. Наверняка каждый создавал класс наследованный от чего-либо, начиная с dict и далее.
class NoneDict(dict):
····def missing(self, key):
········return None
nd = NoneDict({'a': 1, 'b':2})
print(nd['a'], nd['b'], nd['c'])
>>>1 2 None
(Также я обещал одному юному подписчику показать пример, как не париться с ключами даже без defaultdict модуля collections)
Рассматриваем дальше. Инкапсуляция.
"Под инкапсуляцией в объектно-ориентированном программировании понимается упаковка данных и методов для их обработки вместе, т. е. в классе."
Очевидно, что это реализовано тоже, и каждый экземпляр класса всё своё носит с собой.
"Полиморфизм позволяет обращаться с объектами разных классов так, как будто они являются объектами одного класса."
Тоже весьма очевидно. Наследование и перегрузка методов (плюс магические методы) позволяют нам при желании взаимодействовать с классами универсально и единообразно.
На самом деле, мы используем эти принципы ежедневно, даже не задумываясь о том, что "мы используем здесь такой-то принцип, потому что...". Очевидно, что язык явным и естественным образом направляет нас к единственно правильному способу сделать "это" (см. PEP20).
Ребята, сказал бы я, мальчишки и девчонки – пока молодые, развивайте полный лотос, он очень пригодится вам в жизни. И ничего не берите в голову, кроме щебета птиц, шума ветра и плеска волн.
(Тайные виды на гору Фудзи, Виктор Пелевин).
Ребята, мальчишки и девчонки – пишите классы, хорошие и разные, наследуйте их, храните их данные рядом с методами, перегружайте методы под особенности класса. И ничего не берите в голову, кроме чистоты кода и красоты реализации.
Таким образом, мы выяснили, что Python полностью поддерживает ООП.
Это кросспост из моего Telegram-канала "Не Ван Россум", где я прямо сейчас пишу сериал "101 вопрос про Python" с описанием подводных камней, неочевидностей и загвоздок.