Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2 / лр1

.pdf
Скачиваний:
1
Добавлен:
16.05.2025
Размер:
409.95 Кб
Скачать

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ федеральное государственное автономное образовательное учреждение высшего образования

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»

ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ

КАФЕДРА №41

ОЦЕНКА

ПРЕПОДАВАТЕЛЬ

Доцент, к. т. н.

 

 

 

С. А. Чернышев

 

 

 

 

 

должность, уч. степень,

 

подпись, дата

 

инициалы, фамилия

звание

 

 

 

 

 

 

 

Лабораторная работа №1

 

 

На тему: Магические методы классов

 

РАБОТУ ВЫПОЛНИЛ

 

 

 

 

СТУДЕНТ ГР. №

Z0411

23.05.23

 

М. В. Карелина

 

 

 

 

 

 

 

номер

 

подпись, дата

инициалы, фамилия

 

группы

 

Номер студенческого билета: 2020/3477

Санкт-Петербург

2023

Цель работы:

познакомиться с перегрузкой и использованием магических методов классов в Python.

Вариант 8.

Создайте класс Color, имеющий три атрибута: red, green и blue, каждый из которых должен быть целым числом в диапазоне от 0 до 255. Перегрузите

укласса методы сложения и умножения. Результатом сложения должен быть новый объект класса Color, у которого каждый из атрибутов будет равен сумме соответствующих атрибутов исходных цветов (если сумма больше 255, то атрибут равен 255). Аргументом метода умножения является число в диапазоне от 0 до 1, а его результатом должен быть новый объект класса Color,

укоторого каждый из атрибутов будет умножен на данный аргумент и округлен до целого числа.

Текст программы:

class Color:

def __init__(self, red, green, blue): self.red = red

self.green = green self.blue = blue

def __add__(self, other):

new_red = min(self.red + other.red, 255) new_green = min(self.green + other.green, 255) new_blue = min(self.blue + other.blue, 255) return Color(new_red, new_green, new_blue)

def __mul__(self, scalar):

new_red = round(self.red * scalar) new_green = round(self.green * scalar) new_blue = round(self.blue * scalar) return Color(new_red, new_green, new_blue)

color1 = Color(255, 0, 0) color2 = Color(0, 255, 0) color3 = color1 + color2

print(color3.red, color3.green, color3.blue) # 255 255 0 color4 = color1 * 0.5

print(color4.red, color4.green, color4.blue) # 128 0 0

Пример работы программы на Рис. 1.

Тесты программы:

import pytest

from color import Color

def test_color_addition(): color1 = Color(255, 0, 0) color2 = Color(0, 255, 0) color3 = color1 + color2 assert color3.red == 255 assert color3.green == 255 assert color3.blue == 0

def test_color_multiplication(): color1 = Color(255, 0, 0) color2 = color1 * 0.5

assert color2.red == 128 assert color2.green == 0 assert color2.blue == 0

def test_color_border_case_addition(): color1 = Color(255, 0, 0)

color2 = Color(0, 255, 255) color3 = color1 + color2 assert color3.red == 255 assert color3.green == 255 assert color3.blue == 255

def test_color_border_case_multiplication(): color1 = Color(128, 255, 64)

color2 = color1 * 0.999 assert color2.red == 128 assert color2.green == 255 assert color2.blue == 64

Результаты тестов:

Вывод

Я ознакомилась с перегрузкой и использованием магических методов

классов в Python.

Соседние файлы в папке 2