Питон - статьи

773123a3

Процедурный выбор ветвей кода по типу объекта


...bind 'src' in some manner... if <<src is a file object>
>
: read_from_file(src) elif <<src is a urllib object>
>
: read_from_url(src) elif <<src is a stringio object>
>
: read_from_stringio(src) ...etc...

Организовав поддержку общих методов объектами различных типов, мы перемещаем решение о диспетчеризации в объекты из явного условного блока. Просматривая дерево наследования, данный объект src узнает, какие блоки кода ему нужно вызывать. Однако, по-прежнему происходит неявное переключение, но по типу объекта src.

Объект src привилегирован по отношению к любым аргументам, передаваемым в его методы. Из-за синтаксиса ООП эта привилегированность кажется неизбежной, но на самом деле это не так. Во многих случаях процедурное переключение просто переносится в тела методов классов. Например, мы могли бы реализовать совместимые по протоколу классы Foo и Bar следующим образом:





Содержание раздела