Форум сайта python.su
14
KogromВерно сказано!
Но в любом случае, без рассмотрения утиной типизации и abc - это прыжок через 3 ступеньки.
Офлайн
0
slavkaНасколько я понимаю, интерфейсы в Delphy, Java и C# - это костыль, необходимость которого вызвана отсутствием в этих языках множественного наследования и одновременным желанием это множественное наследование использовать. В python множественное наследование есть (как, например, в C++ или Eiffel). Поэтому и костыли не нужны.
И так, есть ли в Python программные интерфейсы?
Офлайн
3
Subideal OxПочему вы рассматриваете интерфейсы в Java и C# как костыль, мне непонятно. Интерфейс описывает взаимодействие реализации (класса) с внешним миром, для чего он и создавался. Эти языки изначально спроектированы так, чтобы не использовать множественное наследование.
Насколько я понимаю, интерфейсы в Delphy, Java и C# - это костыль, необходимость которого вызвана отсутствием в этих языках множественного наследования и одновременным желанием это множественное наследование использовать. В python множественное наследование есть (как, например, в C++ или Eiffel). Поэтому и костыли не нужны.
Итого - для использования “аналогичного функционала” (который называется полиморфизмом) пользуйтесь множественным наследованием.
Офлайн
0
Здесь вроде неплохо разжевано:
http://habrahabr.ru/blogs/python/72757/
Офлайн
0
regallА почему в Java и C# нет множественного наследования?
Почему вы рассматриваете интерфейсы в Java и C# как костыль, мне непонятно.
Офлайн
3
Subideal OxСпросите у Гослинга =). Насколько я помню основным аргументом при отказе от множественного наследования в Java была так называемая “diamond problem” в C++. То есть когда есть иерархия классов типа такой, и классы B и C содержат методы с одинаковыми именами:
А почему в Java и C# нет множественного наследования?
A
/ \
/ \
B-----C
\ /
\ /
D
-----------
| |
| O |
| / \ |
- X Y /
| / | /
| / |/
A B
\ /
?
Офлайн
0
regallОтлично. Добавлю, что кроме этого конфликты имен в Python можно разрешить явно, указав методы и аттрибуты какого из предков надо использовать. Все просто.
В Python есть MRO, который превращает иерархию в линейную структуру
Офлайн
3
Subideal OxSubideal Ox, уж извините, это уже вопросы не ко мне, так как я не очень компетентен в плане архитектуры и устройства JVM, не тянуло меня никогда лезть и копаться там =). Единственное, что могу добавить, что Java всегда борется с повышением быстродействия и т.д. и зачастую архитектурные решения Java принимаются под давлением потребностей повышения скорости выполнения. Такие вещи уже надо смотреть в конкретных реализациях JVM, а именно места, где выполняются блоки статической инициализации и загрузки классов в JVM.
Но если решения так просты, то почему в Java нет MRO?
Офлайн
14
regallЭто в смысле каждый раз, когда программы начинают работать быстрее с приходом нового поколения железа - Ява включается в борьбу и возвращает такие привычные тормоза на их законное место? :lol:
Единственное, что могу добавить, что Java всегда борется с повышением быстродействия
Офлайн
3
Андрей Светлов:lol: Блин. Очепятался, бывает =(
Это в смысле каждый раз, когда программы начинают работать быстрее с приходом нового поколения железа - Ява включается в борьбу и возвращает такие привычные тормоза на их законное место?
Офлайн