Принципы проектирования OO применимы к Python?


Answers

У Python есть свои собственные идиомы дизайна. Некоторые стандартные шаблоны применяются, другие - нет. Что-то вроде стратегии или фабрик поддерживают на языке, что делает их прозрачными.

Например, с первоклассными типами все может быть фабрикой. Нет необходимости в заводском типе, вы можете использовать класс непосредственно для построения любого объекта, который вы хотите.

В принципе, у Python есть свои собственные идиомы дизайна, которые несколько отличаются во многом потому, что они настолько динамичны и обладают невероятными возможностями самоанализа.

Пример:

x = list
my_list = x(range(0,5)) #creates a new list by invoking list's constructor

Назначая тип класса вызываемому объекту, вы можете по существу удалить любые «фабричные» типы в своем коде. Вы остаетесь только с вызывающими, которые создают объекты, которые должны соответствовать некоторым данным соглашениям.

Кроме того, в Python есть шаблоны проектирования, которые не могут быть представлены на других статически типизированных языках эффективно. Хорошими примерами являются метаклассы и декораторы.

Question

Кажется, что во многих дискуссиях OO используют Java или C # в качестве примеров (например, Head First Design Patterns).

Эти шаблоны применяются в равной степени к Python? Или, если я буду следовать шаблонам проектирования, я просто закончу писать Java в Python (что, по-видимому, очень плохо)?




По дальнейшей мысли некоторые шаблоны, такие как Borg, могут быть более специфичными для Python (хотя подобные вещи можно сказать и о других шаблонах и языках).

Шаблон итератора также используется в Python, хотя и в несколько иной форме.

Дункан Бут написал статью о шаблонах в python .




да, конечно, они применяются. Но, как отмечалось выше, многие шаблоны встроены в язык или не имеют отношения к более высоким уровням языка.




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




Шаблоны проектирования - это немного больше, чем лента для исправления языковых недостатков.