Я ищу любые ресурсы, которые приводят примеры лучших практик, шаблонов проектирования и принципов SOLID с использованием Python.шаблоны проектирования python
ответ
Некоторые перекрытия в этих
Intermediate and Advanced Software Carpentry in Python
Code Like a Pythonista: Idiomatic Python
Google Developers Day US - Python Design Patterns
Другой ресурс является примером в Python Recipes. Хорошее количество не соответствует лучшим практикам, но вы можете найти некоторые полезные там шаблоны
Третье звено мертво. Пытался найти зеркало, но не смог. Если у кого-то есть правильная ссылка, добавьте – formatkaka
. Здесь же, _Python Idioms и Efficiency_, похоже, не работают. –
Вы можете начать работу here и here.
Для более детального изучения рисунков вы должны посмотреть на Design Patterns: Elements of Reusable Object-Oriented Software. Исходный код не находится в Python, но вам не нужно понимать шаблоны.
Я думаю, что важно понять, как использовать идиоматический питон для реализации шаблонов проектирования. Это совсем другой язык, чем C++, который используется в GOF, поэтому перенос с C++ на python приведет к непифоновскому коду. – ierax
Я склонен не согласиться. Одноточечный DP или другие DP будут доступны на любом языке OO, будь то Python, Java или C++. Что, по вашему мнению, не является пифоническим? –
Первая ссылка - довольно плохая бумага, с множеством ошибочных утверждений о Python. Вторым в настоящее время 404-м, таким образом, я полагаю, наношу гораздо меньше урона :) –
Возможно, вы также захотите прочитать это article (выберите файл .pdf), в котором обсуждаются шаблоны проектирования в динамических объектно-ориентированных языках (т. Е. Python). Процитирую страницу:
В данной статье рассматриваются как образцы из «банды четырех», или книги «GOF», как его часто называют, появляются, когда подобные проблемы решаются с помощью динамического, более высокого порядка , объектно-ориентированного языка программирования. Некоторые из шаблонов исчезают, т. Е. Поддерживаются непосредственно языковыми функциями, некоторые шаблоны проще или имеют другой фокус, а некоторые практически не изменяются.
Вопрос был о Python; в документе говорится о языке, подобном Scheme, который, как я могу сказать, был изобретен на месте для этой конкретной статьи. Если допрашивающий не является (а) ученым-компьютерным ученым, (б) опыт работы с практикой Python, я сомневаюсь, что они могут получить что-то ценное из статьи - и, более того, они, вероятно, не задали бы этот вопрос в первую очередь. :) –
Брюс Eckel в "Thinking in Python" сильно опирается на шаблоны проектирования
Обратите внимание, что в соответствии с [wiki] (http://wiki.python.org/moin/AdvancedBooks) эта книга больше не поддерживается. – ierax
Тип
>>> import this
в консоли Python.
Хотя это обычно рассматривается как шутка (штраф!), Он содержит пару действительных аксиом, специфичных для python.
Что-то, что вы можете использовать для упрощения кода при вызове атрибутов объектов, которые могли бы или не существовали, - использовать Null Object Design Pattern (к которому я был добавлен в Python Cookbook).
Грубо говоря, цель с Null объектами является создание «интеллектуальной» замены для часто используемого примитивного типа данных None в 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()
и забыть об этом. Остерегайтесь того, что широкое использование объекта Null
может потенциально скрыть ошибки в вашем коде.
- 1. Python шаблоны проектирования, кросс-импорт
- 2. OOPS (шаблоны проектирования)
- 3. Содержание Онтология Шаблоны проектирования
- 4. Шаблоны проектирования пакетной обработки
- 5. Требуются некоторые шаблоны проектирования
- 6. Шаблоны проектирования XSD
- 7. шаблоны проектирования наследования
- 8. Насколько важны шаблоны проектирования?
- 9. Языковые интегрированные шаблоны проектирования
- 10. Шаблоны проектирования Java: Фасад
- 11. шаблоны проектирования linq
- 12. Применимые шаблоны проектирования
- 13. Модульность - шаблоны проектирования - Архитектура
- 14. Шаблоны проектирования для многопоточности
- 15. Php шаблоны проектирования
- 16. Неправильные шаблоны проектирования
- 17. J2ME - BlackBerry - шаблоны проектирования
- 18. Шаблоны проектирования проверки данных
- 19. Автоматизированные шаблоны проектирования C++
- 20. FileSystemWatcher и шаблоны проектирования
- 21. Шаблоны проектирования и Scala
- 22. Шаблоны проектирования контроля доступа
- 23. PHP шаблоны проектирования memcache
- 24. Заводские шаблоны проектирования моделей
- 25. Шаблоны проектирования сообщений
- 26. Шаблоны проектирования Progress Bar?
- 27. Шаблоны проектирования SQL
- 28. создание декораторов. шаблоны проектирования
- 29. Языки программирования и шаблоны проектирования
- 30. Внутренние шаблоны проектирования файлового сервера?
Duplicate: http://stackoverflow.com/questions/127377/programming-languages-and-design-patterns, http://stackoverflow.com/questions/546479/do-oo-design-principles-apply-to -python, http://stackoverflow.com/questions/112358/what-are-some-good-web-resources-for-learning-object-oriented-programming –
https://github.com/faif/python-patterns /blob/master/README.md –