MiddleКодЧастоЕщё не отвечали
Что выведет это затенение атрибута класса?
Предскажите все три строки.
class Parent: x = 1
class Child(Parent): pass
print(Parent.x, Child.x) # (1)
Child.x = 2
print(Parent.x, Child.x) # (2)
Parent.x = 3
print(Parent.x, Child.x) # (3)
Определите вывод и объясните.
1 1, затем 1 2, затем 3 2. Сначала Child.x наследуется от Parent. Присваивание Child.x = 2 создаёт отдельный атрибут на Child, затеняющий родительский, поэтому последующая смена Parent.x на 3 уже не влияет на Child, который хранит собственную 2.
- ✗Думать, что родитель и ребёнок всегда делят один атрибут
- ✗Считать, что запись атрибута распространяется вверх по MRO к родителю
- ✗Ожидать, что тень ребёнка очистится при переназначении родителя
- →Где и в каком порядке идёт поиск атрибута по MRO?
- →Чем это отличается для изменяемого атрибута класса, например списка?