# Тема: Перегрузка операторов в классе.
# В классах описывают специальные методы (магические) для взаимодействия
# с объектами при помощи стандартных операций и встроенных функций.
# К магическим методам относятся метод конструктор __init__, __str__ и т.д.
# Дан класс "Товар" с полями: название и стоимость. Магические методы.
class Product:
# Магический метод конструктор
def __init__(self, title, cost):
self.title = title
self.cost = cost
# Маг метод для вывода данных
def __str__(self):
return f"Товар: {self.title}, цена: {self.cost} руб."
# Маг метод сложения
def __add__(self, other):
# 1 способ - возвращается только цена
return self.cost + other
# 2 способ - возвращается объект с новой ценой
# return Product(self.title, self.cost + other)
# Маг метод (обратный) сложения числа с объектом
def __radd__(self, other):
# 1 - возвращается только цена
return self.cost + other
# 2 - возвращение объекта с новой ценой
# return Product(self.title, self.cost + other)
# Маг __le__() - для оператора меньше или равно <=
def __le__(self, other):
return self.cost <= other.cost # возвращает True или False
# Главная программа
p1 = Product("Зеркало", 150)
print(p1)
# Сложение цены
print(f"Н.ц. {p1 + 100} руб")
# Сложение цены обратный
print(f"Н.ц. {100 + p1} руб")
# Замена объекта
p1 = p1 + 100
# Объявление экземпляра класса
p2 = Product("Тумба", 2500)
print(p2) # print(p2.__str__())
# Сравнение
if p1 <= p2:
print("Цена p1 меньше или равна цене p2")
else:
print("Цена p1 больше цены p2")