Математический модуль

Что нужно сделать

Ирина использует в своей программе очень много различных математических вычислений, связанных с фигурами. Например, нахождение их площадей или периметров. Поэтому, чтобы не захламлять код огромным количеством функций, она решила выделить для них отдельный класс, подключить как модуль и использовать по аналогии с модулем math.

Реализуйте класс MyMath, состоящий как минимум из следующих методов (можете бонусом добавить и другие методы):

  • вычисление длины окружности,
  • вычисление площади окружности,
  • вычисление объёма куба,
  • вычисление площади поверхности сферы.

Пример основного кода:

res_1 = MyMath.circle_len(radius=5)
res_2 = MyMath.circle_sq(radius=6)
print(res_1)
print(res_2)

Результат:

31.41592653589793
113.09733552923255

Что оценивается

  • Результат вычислений корректен.
  • Модели реализованы в стиле ООП, основной функционал описан в методах классов и в отдельных функциях.
  • При написании классов соблюдаются основные принципы ООП: инкапсуляция, наследование и полиморфизм.
    • Для получения и установки значений у приватных атрибутов используются сеттеры и геттеры с соответствующими декораторами.
    • Для создания нового класса на основе уже существующего используется наследование.
    • Для статических и классовых методов используется декоратор classmethod.
  • Формат вывода соответствует примеру.
  • Переменные, функции и собственные методы классов имеют значащие имена, не abcd.
  • Классы и методы/функции имеют прописанную документацию.
  • Есть аннотация типов для методов/функций и их аргументов (кроме args и kwargs). Если функция/метод ничего не возвращают, то используется None.
class MyMath:

    @classmethod
    def circumference(cls, radius: int) -> float:
        '''Функция вычисляет длину окружности через диаметр'''
        result = (2 * 3.14 * radius)
        return result

    @classmethod
    def areacircle(cls, radius: int) -> float:
        '''Функция вычисляет площадь круга через радиус'''
        result = (3.14 * (radius ** 2))
        return result

    @classmethod
    def cubevolume(cls, edge: int) -> float:
        '''Функция вычисляет объем куба'''
        result = (edge ** 3)
        return result

    @classmethod
    def splherearea(cls, radius: int) -> float:
        '''Функция вычисляет площадь поверхности сферы'''
        result = (4 * 3.14 * (radius ** 2))
        return result


res_1 = MyMath.circumference(5)
res_2 = MyMath.areacircle(6)
print(res_1, res_2)

# Предупреждение на случай запуска модуля как программы
if __name__ == "__main__":
    raise Exception('Был запущен импортируемый модуль!')