понимание mro и super() в python

Я понимаю, что MRO — это порядок, в котором атрибут находится в иерархии классов.

Если я использую атрибут 'foo', как в myInstance.foo, будет использован первый foo, найденный в MRO.
И поиск обычно останавливается.

Теперь предположим, что bar() использует super().
Поскольку super() возвращает следующий базовый экземпляр в MRO, myInstance.bar() будет вызывать все bar() в своей иерархической цепочке.

Если bar() всех суперклассов также вызывает super().bar(),
bar() будет вызываться в порядке, указанном MRO.

Я правильно их понимаю?


person eugene    schedule 13.07.2013    source источник


Ответы (1)


Ага. (super немного сложнее, чем «возвращает следующий базовый экземпляр в MRO», но вы понимаете, что делает поиск атрибута в возвращаемом объекте, и это важно.)

person user2357112 supports Monica    schedule 13.07.2013