Подробное объяснение
1️⃣ Python 3 компилирует super() без аргументов в super(__class__, <first_arg>).
2️⃣ Компилятор создаёт __classcell__ — ячейку замыкания с классом B.
3️⃣ Внутри inner() Python ищет __class__ в замыканиях — находит B.
4️⃣ self берётся из параметра f(self) через цепочку замыканий.
5️⃣ super().f() → A.f(self) → возвращает "A".
Почему это важно
В Python 2 super(B, self) было обязательно. В Python 3 zero-argument super() работает через магию компилятора — даже во вложенных функциях.
Post #4749
862
- ✍ 2