Uma coleção de padrões de design e expressões idiomáticas em Python.
Lembre-se de que cada padrão tem suas próprias vantagens e desvantagens. E você precisa prestar mais atenção em por que está escolhendo um determinado padrão do que em como implementá-lo.
Padrões Criativos :
Padrão | Descrição |
---|---|
fábrica_abstrata | use uma função genérica com fábricas específicas |
borgo | um singleton com estado compartilhado entre instâncias |
construtor | em vez de usar vários construtores, o objeto construtor recebe parâmetros e retorna objetos construídos |
fábrica | delegar uma função/método especializado para criar instâncias |
avaliação_preguiçosa | padrão de propriedade avaliado preguiçosamente em Python |
piscina | pré-instanciar e manter um grupo de instâncias do mesmo tipo |
protótipo | use uma fábrica e clones de um protótipo para novas instâncias (se a instanciação for cara) |
Padrões Estruturais :
Padrão | Descrição |
---|---|
3 níveis | dados<->lógica de negócios<->separação de apresentação (relacionamentos estritos) |
adaptador | adaptar uma interface para outra usando uma lista branca |
ponte | um intermediário cliente-provedor para suavizar as mudanças na interface |
composto | permite que os clientes tratem objetos e composições individuais de maneira uniforme |
decorador | agrupar funcionalidade com outras funcionalidades para afetar as saídas |
fachada | usar uma classe como API para várias outras |
peso mosca | reutilizar de forma transparente instâncias existentes de objetos com estado semelhante/idêntico |
controlador_frontal | solicitações de manipulador único chegando ao aplicativo |
mvc | model<->view<->controller (relacionamentos não estritos) |
procurador | um objeto canaliza operações para outra coisa |
Padrões Comportamentais :
Padrão | Descrição |
---|---|
cadeia_de_responsabilidade | aplicar uma cadeia de manipuladores sucessivos para tentar processar os dados |
catálogo | métodos gerais chamarão diferentes métodos especializados com base no parâmetro de construção |
método_de_encadeamento | continuar retorno de chamada próximo método de objeto |
comando | agrupar um comando e argumentos para chamar mais tarde |
iterador | percorrer um contêiner e acessar os elementos do contêiner |
iterador (alt. impl.) | percorrer um contêiner e acessar os elementos do contêiner |
mediador | um objeto que sabe como conectar outros objetos e atuar como proxy |
lembrança | gerar um token opaco que pode ser usado para voltar a um estado anterior |
observador | fornecer um retorno de chamada para notificação de eventos/alterações nos dados |
publicar_assinar | uma fonte distribui eventos/dados para mais de 0 ouvintes registrados |
registro | acompanhar todas as subclasses de uma determinada classe |
especificação | regras de negócios podem ser recombinadas encadeando-as usando lógica booleana |
estado | a lógica é organizada em um número discreto de estados potenciais e o próximo estado que pode ser transferido para |
estratégia | operações selecionáveis sobre os mesmos dados |
modelo | um objeto impõe uma estrutura, mas usa componentes conectáveis |
Visitante | invocar um retorno de chamada para todos os itens de uma coleção |
Design para padrões de testabilidade :
Padrão | Descrição |
---|---|
dependência_injeção | 3 variantes de injeção de dependência |
Padrões Fundamentais :
Padrão | Descrição |
---|---|
delegação_padrão | um objeto trata uma solicitação delegando para um segundo objeto (o delegado) |
Outros :
Padrão | Descrição |
---|---|
lousa | modelo arquitetônico, reunir diferentes conhecimentos de subsistemas para construir uma solução, abordagem de IA - sem padrão de gangue de quatro |
pesquisa_gráfica | algoritmos gráficos - padrão sem gangue de quatro |
hsm | máquina de estado hierárquica - padrão sem gangue de quatro |
Padrões de projeto em Python por Peter Ullrich
Sebastian Buczyński – Por que você não precisa de padrões de design em Python?
Você não precisa disso!
Bibliotecas conectáveis por meio de padrões de design
Quando uma implementação for adicionada ou modificada, revise as seguintes diretrizes:
Adicione a descrição do nível do módulo na forma de uma docstring com links para referências correspondentes ou outras informações úteis.
Adicione a seção "Exemplos no ecossistema Python" se você souber alguma. Mostra como os padrões podem ser aplicados a problemas do mundo real.
fachada.py tem um bom exemplo de descrição detalhada, mas às vezes a mais curta como em template.py seria suficiente.
Para ver versões compatíveis com Python 2 de alguns padrões, verifique a tag legado.
Quando todo o resto estiver feito - atualize a parte correspondente do README.
Execute o seguinte antes de enviar um patch
black .
Isso lint seu código.Então:
tox
ou tox -e ci37
Isso executa testes de unidade. consulte tox.ini para obter mais detalhes../lint.sh
Este script irá lint e testará seu código. Este script reflete as ações do pipeline de CI. Você também pode executar comandos flake8
ou pytest
manualmente. Exemplos podem ser encontrados em tox.ini
.
Você pode fazer a triagem de problemas e receber solicitações que podem incluir a reprodução de relatórios de bugs ou a solicitação de informações vitais, como números de versão ou instruções de reprodução. Se você quiser iniciar a triagem de problemas, uma maneira fácil de começar é assinar padrões python no CodeTriage.
O pessoal da Mutable.ai construiu um assistente de IA que reconhece a base de código. Experimente