Назад к вопросамПочему оба экземпляра делят один список
MiddleДебаггингЧасто
Почему оба экземпляра делят один список items?
У каждой корзины должны быть свои товары, но добавление в одну видно в другой.
class Cart:
items = []
def add(self, item):
self.items.append(item)
a = Cart(); b = Cart()
a.add("apple")
print(b.items) # ['apple'] -- утекло между экземплярами!Найдите и исправьте ошибку.
items = [] — это атрибут класса, общий для всех экземпляров, поэтому a и b изменяют один и тот же список, и b.items показывает ['apple']. Решение: инициализировать его на экземпляр в __init__: def __init__(self): self.items = [].
- Класть изменяемое состояние в атрибут класса вместо
__init__ - Думать, что
self.items.appendсоздаёт атрибут на экземпляр - Считать, что
list()против[]меняет совместное использование
- Почему чтение
self.itemsнаходит атрибут класса, когда атрибута экземпляра нет? - Когда атрибут класса — правильное место для общего состояния?