Создаешь класс с методами и свойствами. У экземпляров класса методам и свойствам можно задавать свои параметры и менять методы экземпляров класса по своему усмотрению. Считается что это удобно, но в Питоне ООП вещь не обязательная. Обязательная она в Джаве.
Вот тут объектно-оринтировано искал радиус окружности в треугольнике по координатам точек треугольника
Преимущество ООП в данном случае в том что можно создавать множество экземпляров треугольников со своими собственными параметрами. А всё вычисления находятся в родительском классе. Работу функции вычисления через дочерние классы можно поменять для конкретного экземпляра, что не затронет другие экземпляры класса
ООП - это всего лишь надстройка над процедурным программированием, удешевляющая написание кода.
Разбиваем программу на независимые компоненты, каждый из которых имеет законченный замкнутый функционал. Для взаимодействия компонентов между собой в каждом компоненте создаём интерфейс: набор подпрограмм, которые можно вызывать из других компонентов.
Называем чертёж, по которому создаётся компонент, классом, сам компонент - объектом (экземпляром класса), а подпрограммы переименуем в методы и вместо процедурного "метод(объект, параметры)" будем записывать вызов в виде: "объект.метод(параметры)".
Смысл ООП в том, что каждый объект - независимый от остального кода программы "чёрный ящик", содержимое которого недоступно другим объектам. Мы можем как угодно менять код класса, но пока интерфейс остаётся неизменным, эти изменения никак не затрагивают код других классов.
Вместо сложного монолита с непредсказуемым связями между разными частями кода получаем код, собранный из независящих друг от друга простых кубиков - классов и объектов.