@Sergey_Lomakin

Почему все элементы списка, ссылаются на последнее добавление?

class Stock:
    def __init__(self, model, price, quantity):
        self.model = model
        self.price = price
        self.quantity = quantity
        self.office_equipment = {'Модель': self.model, 'Цена': self.price, 'Количество': self.quantity}
        self.store = []

    def name(self):
        return f'{self.model}, стоимость: {self.price}, ' \
               f'количество на складе: {self.quantity}'

    def reception(self):
        try:
            value_model = input('Введите модель устройства: ')
            value_price = int(input('Введите цену устройства: '))
            value_quantity = int(input('Введите количество: '))
            if value_price > 0 and value_quantity >= 1:
                temp_value = {'Модель': value_model, 'Цена': value_price, 'Количество': value_quantity}
                self.office_equipment.update(temp_value)
                self.store.append(self.office_equipment)
            else:
                raise ValueError
        except:
            print(f'Неправильные данные')
            return self.store

        user_add = input('Для остановки введите: "stop": ')
        if user_add.lower() == 'stop':
            return self.store
        else:
            return Stock.reception(self)


class Printer(Stock):
    def to_print(self):
        return f'распечатывет {self.model}'


class Scanner(Stock):
    def to_scan(self):
        return f'сканирует {self.model}'


class Xerox(Stock):
    def to_copy(self):
        return f'копирует {self.model}'


printer_1 = Printer('Принтер', 5000, 4)
print(printer_1.reception())
  • Вопрос задан
  • 63 просмотра
Решения вопроса 1
Tomio
@Tomio
backend developer (python, php)
Потому что так работает питон)
hYwYJqY.png
Список у вас содержит один и тот же объект - self.office_equipment, который вы постоянно обновляете через update.
Список может содержать "бесконечное" количество ссылок на неуникальные объекты. В ваше случае каждый раз в списке создается ссылка на один и тот же объект - self.office_equipment.
Вам нужно написать вот так, чтобы всё работало как вы планировали:
self.store.append(temp_value)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы