Шаблоны проектирования python

Я ищу любые ресурсы, которые приводят примеры лучших практик, шаблонов проектирования и принципов SOLID с использованием Python.

Ответ 1

Некоторое перекрытие в этих

Промежуточное и расширенное программное обеспечение Плотницкие работы в Python

Код Как Pythonista: Идиоматический Python

Идиомы и эффективность Python

Google Developers Day США - шаблоны проектирования Python

Другим ресурсом является пример в Python Recipes. Хорошее количество не соответствует лучшим практикам, но вы можете найти некоторые шаблоны там, которые полезны

Ответ 2

Тип

>>> import this

в консоли Python.

Хотя это обычно рассматривается как шутка (штраф!), он содержит пару действительных аксиом, специфичных для python.

Ответ 3

Bruce Eckel " Мышление в 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). Чтобы процитировать страницу:

В этой статье рассматривается, как шаблоны из книги "Банда четырех" или "ГОФ", как ее часто называют, появляются, когда схожие проблемы решаются с использованием динамического, объектно-ориентированного языка программирования более высокого порядка. Некоторые из шаблонов исчезают, т.е. Поддерживаются непосредственно языковыми функциями, некоторые шаблоны проще или имеют другой фокус, а некоторые практически не изменяются.