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" с описанием подводных камней, неочевидностей и загвоздок.