
2 / лр1
.pdfМИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ федеральное государственное автономное образовательное учреждение высшего образования
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ АЭРОКОСМИЧЕСКОГО ПРИБОРОСТРОЕНИЯ»
ИНСТИТУТ НЕПРЕРЫВНОГО И ДИСТАНЦИОННОГО ОБРАЗОВАНИЯ
КАФЕДРА №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.