Sobre o projeto

python-patterns é uma coleção de referência de padrões de design e expressões idiomáticas implementados em Python. Em vez de uma biblioteca, é um recurso de aprendizado: cada padrão reside em seu próprio módulo pequeno sob uma pasta de categoria, e o README os indexa com descrições curtas. A cobertura é organizada em vários grupos. Os padrões criacionais incluem abstract_factory, borg, builder, factory, lazy_evaluation, pool e prototype. Os padrões estruturais incluem 3-tier, adapter, bridge, composite, decorator, facade, flyweight, front_controller, mvc e proxy. Os padrões comportamentais incluem chain_of_responsibility, catalog, chaining_method, command, interpreter, iterator (com uma implementação alternativa), mediator, memento, observer, publish_subscribe, registry, servant, specification, state, strategy, template e visitor. Há também exemplos de design para testabilidade (dependency_injection com três variantes), um padrão fundamental de delegação (delegation_pattern) e outros padrões como blackboard, graph_search e uma máquina de estados hierárquica (hsm). O README enquadra explicitamente os padrões como trade-offs, incentivando os leitores a focar no porquê de um padrão ser escolhido, em vez de apenas como é codificado. Ele também documenta anti-padrões desencorajados em Python, incluindo singleton (módulos já são singletons), god object e uso excessivo de herança, com alternativas sugeridas, como variáveis em nível de módulo, injeção de dependência, composição e delegação. Espera-se que cada módulo de exemplo tenha um docstring em nível de módulo com referências e, quando possível, uma seção "Exemplos no ecossistema Python" mostrando uso no mundo real. O projeto mantém uma tag legada para versões compatíveis com Python 2 de alguns padrões. As orientações de contribuição cobrem docstrings, atualizações do README e execução de ./lint.sh para formatação, linting, verificação de tipos e testes; as dependências de desenvolvimento são fixadas no Pipfile.lock e regeneradas com make lock. A triagem de problemas é suportada por meio do CodeTriage, e o README vincula várias palestras e vídeos de conferências sobre padrões de design em Python.