Что выведет код Junior ООП и dataclasses обновлено
Атрибут класса и атрибут экземпляра
Вопрос
Что выведет код? По строке на каждый print.
class Counter:
total = 0
def __init__(self):
self.total += 1
a = Counter()
b = Counter()
print(a.total, b.total, Counter.total)
Counter.total = 10
c = Counter()
print(a.total, c.total)
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: 1 1 0, 1 11. self.total += 1 читает total из класса (0), а пишет в экземпляр.
Что выведет
1 1 0
1 11
Разбор
self.total += 1 читает total из класса (0), а пишет в экземпляр. Поэтому у каждого экземпляра свой total = 1, а атрибут класса остаётся 0. После Counter.total = 10 новый экземпляр прочитает 10 и запишет себе 11, у a по-прежнему свой 1. Чтобы считать экземпляры, пишут Counter.total += 1 или type(self).total += 1.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.