Я ищу любые ресурсы, которые приводят примеры лучших практик, шаблонов проектирования и принципов SOLID с использованием Python.
Шаблоны проектирования python
Ответ 1
Некоторое перекрытие в этих
Промежуточное и расширенное программное обеспечение Плотницкие работы в Python
Код Как Pythonista: Идиоматический Python
Google Developers Day США - шаблоны проектирования Python
Другим ресурсом является пример в Python Recipes. Хорошее количество не соответствует лучшим практикам, но вы можете найти некоторые шаблоны там, которые полезны
Ответ 2
Тип
>>> import this
в консоли Python.
Хотя это обычно рассматривается как шутка (штраф!), он содержит пару действительных аксиом, специфичных для python.
Ответ 3
Bruce Eckel " Мышление в Python" сильно опирается на шаблоны проектирования
Ответ 4
Вы можете начать здесь и здесь.
Для более глубокого изучения дизайнеров вы должны взглянуть на Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения. Исходный код не находится в Python, но вам не нужно понимать шаблоны.
Ответ 5
Что-то, что вы можете использовать, чтобы упростить свой код при вызове атрибутов объектов, которые могли бы или не существовали, - использовать шаблон дизайна нулевого объекта ( к которому я был представлен в Python Cookbook).
Грубо, цель с объектами Null заключается в том, чтобы обеспечить "интеллектуальную" замена часто используемого примитивного типа данных None в Python или Null (или 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()
и забыть об этом. Помните, что широкое использование объекта Null
может потенциально скрывать ошибки в вашем коде.
Ответ 6
Вы также можете прочитать эту статью статью (выберите файл .pdf), в котором обсуждаются шаблоны проектирования в динамических объектно-ориентированных языках (т.е. Python). Чтобы процитировать страницу:
В этой статье рассматривается, как шаблоны из книги "Банда четырех" или "ГОФ", как ее часто называют, появляются, когда схожие проблемы решаются с использованием динамического, объектно-ориентированного языка программирования более высокого порядка. Некоторые из шаблонов исчезают, т.е. Поддерживаются непосредственно языковыми функциями, некоторые шаблоны проще или имеют другой фокус, а некоторые практически не изменяются.