Загрузка данных


# Тема: Перегрузка операторов в классе.
# В классах описывают специальные методы (магические) для взаимодействия
# с объектами при помощи стандартных операций и встроенных функций.
# К магическим методам относятся метод конструктор __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")