Я ищу любые ресурсы, которые дают примеры передового опыта, шаблонов проектирования и принципов SOLID с использованием Python.
Я ищу любые ресурсы, которые дают примеры передового опыта, шаблонов проектирования и принципов SOLID с использованием Python.
Ответы:
Некоторые совпадают в этих
Средний и продвинутый Software Carpentry в Python
Код, как Pythonista: идиоматический Python
День разработчиков Google США - шаблоны проектирования Python
Другой ресурс - пример на Рецептах Питона . Многие не следуют передовым методам, но вы можете найти там полезные шаблоны
« Мышление в Python » Брюса Экеля в значительной степени опирается на шаблоны проектирования
Вы можете начать здесь и здесь .
Для более глубокого изучения паттернов дизайна вы должны взглянуть на Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения . Исходный код не написан на Python, но вам не нужно понимать шаблоны.
То, что вы можете использовать для упрощения своего кода при вызове атрибутов для объектов, которые могут существовать или не существовать, - это использовать Null Object Design Pattern (который я представил в 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
объекта может потенциально скрывать ошибки в вашем коде.
Вы также можете прочитать эту статью (выберите файл .pdf), в которой обсуждаются шаблоны проектирования в динамических объектно-ориентированных языках (например, Python). Цитировать страницу:
В этой статье рассматривается, как шаблоны из «Банды четырех», или книги «GOF», как ее часто называют, появляются, когда подобные проблемы решаются с использованием динамического объектно-ориентированного языка программирования более высокого порядка. Некоторые из шаблонов исчезают, то есть они напрямую поддерживаются языковыми функциями, некоторые шаблоны проще или имеют другую направленность, а некоторые практически не изменяются.