💀
Второй курс РПО
Разработка программных модулей
Разработка программных модулей
  • Модели разработки
  • Ошибки и отладка программ
  • Средства разработки алгоритмов
    • Основные принципы и стадии тестирования
  • Сложностные классы
  • Эмуляторы операционных систем
  • Сложность сортировки
  • Уровни тестирования
  • Задание №1
  • Регрессионное тестирование
  • Тестирование «белым ящиком»
  • Как делать оценку сложности?
  • Алгоритмы и сложность
  • Тестирование "белым ящиком" №2
  • Сложность алгоритмов
  • Тестирование "белым ящиком" №3
  • Тестирование "Чёрным ящиком»" №1
  • Тестирование "Черным ящиком" №2
  • Оценка сложности эвристических алгоритмов
  • Принципы ООП
  • Тестирование "Черным ящиком" №3
  • КТ - В3
  • Модульное тестирование
    • С кодами
  • Модульное тестирование
  • Абстрактные классы и интерфейсы в Python
  • Структуры в Python по аналогии с C++
    • Диалоги гениев
  • Делегаты в Python
    • Ещё более не смешные диалоги
  • Регулярные выражения в Python от простого к сложному
  • Python: Коллекции
  • Параметризованные классы (шаблоны)
  • Указатели и операции со списками в Python
  • Интеграционное тестирование
  • Работа с классами. Перегрузка методов
  • Определение операций в классе.
  • Создание наследованных классов
  • Интеграционное тестирование
  • Работа с объектами через интерфейсы
  • Использование стандартных интерфейсов
  • Работа с типом данных "Структура"
  • Коллекции. Параметризованные классы
  • Использование регулярных выражений
  • Операции со списками
  • Что такое паттерны проектирования?
  • Шпаргалка по шаблонам проектирования
    • [Habr] Шпаргалка
  • UML-диаграммы проектирования
  • Использование основных шаблонов.
  • Использование каких то там шаблонов
  • 15-я Практическая
  • 16-я Практическая
  • Graphviz Online
  • 17-я Практическая
  • Введение в теорию программирования: Объектно-ориентированный подход
  • Документирование софта и стандарты
  • C# Ввод и вывод
  • Оптимизация кода: просто о главном
  • Автоматизация разработки технической документации
  • Автоматизированное документирование и первичные данные
  • ADO.NET что это?
Powered by GitBook
On this page
  • Пример 1: Перегрузка операции сложения (__add__)
  • Объяснение
  • Тестирование
  • Пример 2: Перегрузка операции сравнения (__eq__)
  • Объяснение
  • Тестирование
  • Пример 3: Перегрузка операции умножения (__mul__)
  • Объяснение
  • Тестирование
  • Результаты

Определение операций в классе.

24.01.2025 - Практическая работа №6. Определение операций в классе.

В Python можно переопределять стандартные операции (например, сложение, вычитание и сравнение) для объектов пользовательских классов. Это делается с помощью специальных методов, таких как __add__, __sub__, __eq__ и других.


Пример 1: Перегрузка операции сложения (__add__)

class Vector:  # Создаём класс Vector для работы с векторами
    def __init__(self, x, y):  # Конструктор, принимает координаты x и y
        self.x = x
        self.y = y

    def __add__(self, other):  # Переопределяем операцию сложения "+"
        return Vector(self.x + other.x, self.y + other.y)

    def __repr__(self):  # Метод для отображения объекта в удобном виде
        return f"Vector({self.x}, {self.y})"

Объяснение

  • __init__(self, x, y) — инициализируем координаты вектора.

  • __add__(self, other) — переопределяем операцию сложения для двух объектов Vector. Сложение выполняется покоординатно.

  • __repr__(self) — возвращает строку, которая описывает объект в удобном виде.

Тестирование

v1 = Vector(2, 3)  # Создаём вектор с координатами (2, 3)
v2 = Vector(4, 5)  # Создаём вектор с координатами (4, 5)
v3 = v1 + v2  # Складываем два вектора
print(v3)  # Ожидаемый результат: Vector(6, 8)

Пример 2: Перегрузка операции сравнения (__eq__)

class Point:  # Класс для работы с точками на плоскости
    def __init__(self, x, y):  # Конструктор, принимает координаты x и y
        self.x = x
        self.y = y

    def __eq__(self, other):  # Переопределяем оператор "=="
        return self.x == other.x and self.y == other.y

    def __repr__(self):  # Для удобного отображения объекта
        return f"Point({self.x}, {self.y})"

Объяснение

  • __init__(self, x, y) — инициализируем координаты точки.

  • __eq__(self, other) — определяем, что точки равны, если их координаты совпадают.

  • __repr__(self) — возвращает удобное текстовое представление точки.

Тестирование

p1 = Point(1, 2)  # Создаём точку (1, 2)
p2 = Point(1, 2)  # Создаём точку (1, 2)
p3 = Point(3, 4)  # Создаём точку (3, 4)
print(p1 == p2)  # Ожидаемый результат: True
print(p1 == p3)  # Ожидаемый результат: False

Пример 3: Перегрузка операции умножения (__mul__)

class Matrix:  # Класс для работы с матрицами
    def __init__(self, values):  # Конструктор, принимает список значений матрицы
        self.values = values

    def __mul__(self, other):  # Переопределяем оператор "*"
        result = [
            [self.values[i][j] * other for j in range(len(self.values[0]))]
            for i in range(len(self.values))
        ]
        return Matrix(result)

    def __repr__(self):  # Для удобного отображения матрицы
        return f"Matrix({self.values})"

Объяснение

  • __init__(self, values) — инициализируем значения матрицы.

  • __mul__(self, other) — переопределяем умножение матрицы на скаляр (число). Каждый элемент матрицы умножается на other.

  • __repr__(self) — возвращает текстовое представление матрицы.

Тестирование

m = Matrix([[1, 2], [3, 4]])  # Создаём матрицу 2x2
scaled_matrix = m * 2  # Умножаем матрицу на скаляр 2
print(scaled_matrix)  # Ожидаемый результат: Matrix([[2, 4], [6, 8]])

Результаты

  1. Пример 1: Векторы корректно складываются по координатам, и результат выводится в виде нового объекта.

  2. Пример 2: Сравнение точек выполняется корректно — точки считаются равными, если их координаты совпадают.

  3. Пример 3: Матрица корректно умножается на скаляр, возвращая новую матрицу с результатами умножения.

PreviousРабота с классами. Перегрузка методовNextСоздание наследованных классов

Last updated 4 months ago