Содержание
- Краткое резюме
- Почему простой тип данных не подходит для описания круга ⚪️
- Объявление класса — правильный подход 👩💻
- Добавление метода для вычисления площади круга 🔢
- Итоги и что делать дальше
Краткое резюме
- Python — объектно-ориентированный язык, что позволяет более удобно и понятно моделировать сущности программы.
- На примере задачи создания класса для геометрической фигуры — круга — показаны минусы использования кортежей, списков и словарей для описания объекта.
- Основные проблемы: нечёткий порядок и смысл элементов, отсутствие проверки корректности данных (например, радиуса), отсутствие единых методов.
- Решением становится определение класса с методами, что позволяет защитить данные и добавить функциональность, сохранив понятный доступ к свойствам.
- Важно понимать этапы создания объекта в Python: сначала создаётся объект (new), потом инициализируется (init).
- Метод для вычисления площади круга реализуется как функция класса, принимающая объект через self.
- В дальнейшем следует подумать о проверках корректности данных (например, чтобы радиус не был отрицательным).
Почему простой тип данных не подходит для описания круга ⚪️
При моделировании круга на плоскости, который задаётся двумя координатами центра и радиусом, можно попробовать использовать разные встроенные типы Python: кортежи (tuple
), списки (list
), словари (dict
). Однако каждый из вариантов имеет недостатки:
Кортежи
- Кортеж неизменяемый, поэтому изменить параметры круга в программе нельзя — придётся создавать новый.
- Легко запутаться с порядком элементов (сначала координаты, потом радиус или наоборот).
- Индексы элементов неочевидны: что лежит под индексом 0 — X или Y?
- Нет проверки данных: радиус может быть отрицательным, что некорректно.
Списки
- Позволяют изменять поля объекта.
- Проблема с индексами и порядком остаётся.
- Игнорируется проверка корректности радиуса.
- Появляются лишние методы, которые не нужны для круга (например,
pop()
).
Словари
- Решают проблему порядка и делают код читаемее — доступ по именам.
- Однако по-прежнему нет проверки на корректность радиуса.
- Словари также выводят целый ряд методов, которые могут привести к ошибкам, если кто-то случайно вызовет не тот метод.
«Использование только встроенных типов данных для описания объекта приводит к множеству скрытых проблем — неконсистентности, ошибкам с индексами и порядком, отсутствию валидации.»
Объявление класса — правильный подход 👩💻
Объектно-ориентированное программирование решает указанные проблемы: класс объединяет как данные, так и логику их обработки.
Создание класса в Python
- Для объявления класса используется ключевое слово
class
и имя класса с заглавной буквы. - Класс по умолчанию наследуется от
object
. - Создание экземпляра происходит в два шага:
- метод
__new__
создаёт объект, - метод
__init__
его инициализирует.
- метод
class Circle:
def __init__(self, x, y, radius):
self.x = x
self.y = y
self.radius = radius
self
— ссылка на текущий объект, с ним связываются свойства круга.
Создание и использование объектов
Создать объект класса Circle
:
c = Circle(0, 0, 0)
print(c.x, c.y, c.radius) # вывод координат и радиуса
c.radius = 10 # можно изменить радиус
«Доступ к свойствам объекта становится понятным и прямым — вместо непонятных индексов нужен просто
объект.поле
.»
Преимущества класса по сравнению с кортежами и словарями
- Нет путаницы с индексами и порядком.
- Легко читать и писать код.
- Появляется возможность добавлять методы — функции, связанные с объектом.
Добавление метода для вычисления площади круга 🔢
Для решения задачи вычисления площади круга в классе можно определить метод area
:
import math
class Circle:
def __init__(self, x, y, radius):
self.x = x
self.y = y
self.radius = radius
def area(self):
return math.pi * (self.radius ** 2)
Использование метода:
c = Circle(0, 0, 10)
print(c.area()) # Выведет площадь круга
Обратите внимание, что в методах первым аргументом всегда идёт self
, через который можно обращаться к свойствам объекта. При вызове метода self
передаётся автоматически.
Итоги и что делать дальше
- Использование класса позволило объединить данные и методы работы с ними в одном объекте, что делает код проще, читаемее и надёжнее.
- Пока не реализована проверка корректности данных (например, чтобы радиус был неотрицательным).
- В следующей части лекции предложат способы добавить такую проверку и работать с ошибками.
«Классы в Python позволяют избавиться от хаоса индексов и состояния, делая код наиболее естественным способом моделирования объектов реального мира.»