TGViewer
Python: задачки и вопросы Python: задачки и вопросы @quiz_python · 6.93K subscribers
Post #4566 696
Развёрнутое пояснение

1️⃣При определении класса 𝙱𝚘𝚡 создаётся атрибут класса 𝚒𝚝𝚎𝚖𝚜 и привязывается к пустому списку []; этот список один на весь класс, а не на экземпляр.

2️⃣В конструкторе __init__ обращение 𝚜𝚎𝚕𝚏.𝚒𝚝𝚎𝚖𝚜 находит этот атрибут класса (у экземпляра ещё нет своего 𝚒𝚝𝚎𝚖𝚜) и вызывает у него метод 𝚊𝚙𝚙𝚎𝚗𝚍.

3️⃣Создание 𝚊 = 𝙱𝚘𝚡(𝟷) добавляет 𝟷 в общий список → теперь 𝚒𝚝𝚎𝚖𝚜 = [𝟷]. Создание 𝚋 = 𝙱𝚘𝚡(𝟸) добавляет 𝟸 в тот же самый список → [𝟷, 𝟸].

4️⃣И 𝚊.𝚒𝚝𝚎𝚖𝚜, и 𝚋.𝚒𝚝𝚎𝚖𝚜 ссылаются на один и тот же общий список, поэтому print(a.items, b.items) выводит [1, 2] [1, 2].

Почему это важно
Общий изменяемый атрибут класса легко превращается в неявный «shared state» между инстансами и рождает трудноуловимые баги; если список должен быть отдельным у каждого объекта, его нужно создавать в __init__ как 𝚜𝚎𝚕𝚏.𝚒𝚝𝚎𝚖𝚜 = [].
  • ✍ 6
More from @quiz_python
  1. Sep 21, 2026Развёрнутое пояснение: 1. make_handlers создаёт пустой список handlers. 2. Цикл дважды при…
  2. Sep 21, 2026Post #4880
  3. Sep 21, 2026Развёрнутое пояснение: 1. Вызывается persist_order, и блок try печатает строку write. 2. И…
  4. Sep 21, 2026Post #4878
  5. Sep 14, 2026А вы уже забрали свой подарок ко Дню программиста? Мы в Tproger вместе с нашими друзьями с…
  6. Aug 30, 2026Развёрнутое пояснение: 1. Создаётся список batch с двумя разными словарями. 2. Вызов enric…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →