6 ответов:
некоторые перекрытия в этих
среднее и продвинутое программное обеспечение плотницкие работы в Python
код, как Pythonista: идиоматический Python
Google Developers Day US-Python Design Patterns
другой ресурс, например, в Питон Рецепты. Большое количество не следовать рекомендациям, но вы можете найти некоторые шаблоны там, которые полезны
тип
>>> import thisв консоли Python.
хотя это обычно рассматривается как (хорошо!) шутка, он содержит несколько действительных аксиом, специфичных для python.
Брюса Экеля" мышление на Python " сильно опирается на шаблоны проектирования
вы можете начать здесь и здесь.
для более глубокого взгляда на дизайн pattners вы должны посмотреть на шаблоны проектирования: элементы объектно-ориентированного проектирования. Исходный код не в Python, но это не должно быть для вас, чтобы понять шаблоны.
что-то вы можете использовать для упрощения кода при вызове атрибутов на объекты, которые могут или не могут существовать, чтобы использовать Шаблон Проектирования Нулевого Объекта (к которому я был представлен в Python Cookbook).
грубо говоря, цель с нулевыми объектами состоит в том, чтобы обеспечить "интеллектуальный" замена часто используется примитивный тип данных в Python или нет Null (или указатели Null) в других языках. Они используются для многих цели в том числе важный случай, когда один член какой-то группы в остальном подобные элементы являются особенными по какой-либо причине. Наиболее часто это приводит к условным операторам для различения обычные элементы и примитивное нулевое значение.
этот объект просто съедает отсутствие ошибки атрибута, и вы можете избежать проверки их существования.
это не более, чем
class Null(object): def __init__(self, *args, **kwargs): "Ignore parameters." return None def __call__(self, *args, **kwargs): "Ignore method calls." return self def __getattr__(self, mname): "Ignore attribute requests." return self def __setattr__(self, name, value): "Ignore attribute setting." return self def __delattr__(self, name): "Ignore deleting attributes." return self def __repr__(self): "Return a string representation." return "<Null>" def __str__(self): "Convert to a string and return it." return "Null"С этим, если у вас
Null("any", "params", "you", "want").attribute_that_doesnt_exists()он не взорвется, а просто молча стать эквивалентомpass.обычно вы делаете что-то вроде
if obj.attr: obj.attr()С этим, вы просто сделать:
obj.attr()и забыть об этом. Помните, что широкое использование
вы также можете прочитать это статьи (выберите .pdf file), в котором обсуждаются шаблоны проектирования на динамических объектно-ориентированных языках (например, Python). Чтобы процитировать страницу:
в этой статье исследуется, как шаблоны из "Банды четырех", или книги "GOF", как ее часто называют, появляются, когда аналогичные проблемы решаются с использованием динамического, более высокого порядка, объектно-ориентированного языка программирования. Некоторые модели исчезают-то есть, они поддерживаются непосредственно по языковым особенностям некоторые шаблоны проще или имеют другую направленность, а некоторые по существу неизменны.
Comments