шаблоны разработки Python [закрываются]

Можете ли вы дать более подробный пример использования? Возможно, шаблон прототипа будет работать:

Если в группах объектов есть сходство, может помочь шаблон прототипа. У вас есть много случаев, когда одно население нейронов подобно другому, кроме как-то иначе? (т. е. вместо того, чтобы иметь небольшое количество дискретных классов, у вас есть большое количество классов, которые немного отличаются друг от друга.)

Python - это классический язык, но так же, как вы можете имитировать программирование на основе классов в языке, основанном на прототипе, таком как Javascript, вы можете моделировать прототипы, предоставляя вашему классу метод CLONE, который создает новый объект и заполняет его ivars из родителя. Напишите метод clone, чтобы переданные ему параметры ключа переопределили «унаследованные» параметры, поэтому вы можете вызвать его с помощью чего-то типа:

new_neuron = old_neuron.clone( branching_length=n1, branching_randomness=r2 )
164
задан Ted Smith 3 March 2009 в 13:47
поделиться

6 ответов

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

Плотницкие работы Intermediate and Advanced Software в Коде Python

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

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

Google Developers Day US - Шаблоны разработки Python

Другой ресурс примером в Рецепты Python . Большое количество не применяет лучшие методы, но можно найти некоторые шаблоны там, которые являются полезны

151
ответ дан 5 revs, 4 users 89% 4 November 2019 в 16:57
поделиться

Тип

>>> import this

в консоли Python.

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

24
ответ дан Anonymous 4 November 2019 в 16:57
поделиться

Bruce Eckel" Взгляды в Python " склоняется в большой степени на Шаблонах разработки

13
ответ дан leancz 4 November 2019 в 16:57
поделиться

Можно начать здесь и здесь .

Для больше подробно смотрят на дизайн pattners, необходимо посмотреть Шаблоны разработки: Элементы Допускающего повторное использование Объектно-ориентированного программного обеспечения . Исходный код не находится в Python, но это не должно быть для Вас для понимания шаблонов.

6
ответ дан Brian R. Bondy 4 November 2019 в 16:57
поделиться

Можно также хотеть считать этот статья (выберите файл pdf), который обсуждает Шаблоны разработки на ориентированных языках динамического объекта (т.е. Python). Заключить страницу в кавычки:

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

3
ответ дан Gilad Naor 4 November 2019 в 16:57
поделиться

Чтобы упростить код при вызове атрибутов для объектов, которые могут существовать, а могут и не существовать, можно использовать шаблон проектирования Null Object Design Pattern (о котором я был представлен в Поваренная книга Python ).

Грубо говоря, цель с объектами 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 («любой», «параметры», «вы», «хочу»). Attribute_that_doesnt_exists () он не взорвется, но просто незаметно становится эквивалентом прохода .

Обычно вы делаете что-то вроде

if obj.attr:
    obj.attr()

С этим вы просто делаете:

obj.attr()

и забываете об этом. Помните, что широкое использование объекта Null потенциально может скрыть ошибки в вашем коде.

5
ответ дан 23 November 2019 в 21:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: