Выбор ответа Junior ООП и dataclasses спрашивают часто обновлено

Изменяемый атрибут класса

Вопрос

Что выведет print(b.items)?

class Cart:
    items = []

a, b = Cart(), Cart()
a.items.append('x')
print(b.items)

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: ['x']. items объявлен на уровне класса, поэтому это один список на все экземпляры. a.items.append не создаёт атрибут экземпляра, а меняет общий список через поиск в классе. b.items видит тот же список.

Варианты ответа

  1. []
  2. AttributeError
  3. ['x']правильный ответ
  4. ['x', 'x']

Разбор

items объявлен на уровне класса, поэтому это один список на все экземпляры. a.items.append не создаёт атрибут экземпляра, а меняет общий список через поиск в классе. b.items видит тот же список. Изменяемое состояние экземпляра создают в __init__: self.items = [].

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме