Como Implementar O Padrão de Projeto Singleton em Python

Este artigo tem por finalidade apresentar a definição, uso e melhores práticas do padrão de projeto Singleton em Python, a fim de que possamos saber quando e porque utilizá-lo corretamente.

Série Design Patterns em Python

Antes de mais nada, eu gostaria de deixar aqui o repositório no github que eu criei com os exemplos dessa série.

Portanto, se por acaso você quiser conferir todo o código que estamos escrevendo neste artigo, basta acessar o link:

O Que É O Singleton?

O padrão de projeto Singleton tem como objetivo garantir que exista apenas uma instância de um determinado objeto em sua aplicação.




Ele é comumente implementado utilizando um construtor privado, e um método estático que retorna uma instância da classe.

meme the singleton

O Padrão de Projeto Singleton Em Python

Como você pode imaginar, o padrão de projeto Singleton em Python pode assumir diversas formas.

Tentando chegar próximo das implementações padrões do Singleton em outras linguagens, podemos implementar algo do tipo:


E podemos testar e conferir o resultado abaixo:




Singleton Utilizando O __new__

Nós podemos também sobrescrever o magic method __new__ para obtermos um comportamento semelhante:


E podemos testar o nosso exemplo tranquilamente:

Função Como Singleton

Nós podemos também criar uma classe “privada”, e retornar a instância desta classe através de uma função, que “simularia” a criação do objeto:





Note que utilizamos o underscore para declarar a classe Singleton, já que no Python, nós não temos como definir algo diretamente como privado, da mesma maneira que outras linguagens como o Java permitem.

Você pode conferir esta frase no seguinte link: https://mail.python.org/pipermail/tutor/2003-October/025932.html

Lembrem-se, o Python confia em você 😉

Módulos e Funções como Singletons

Ao criarmos um modulo com funções, nós podemos obter o mesmo comportamento de um singleton.

Vamos criar um módulo chamado smodule, e adicionar o código abaixo nele:


Ao utilizarmos o código, você poderá conferir que você pode importar este método várias vezes, e ele sempre sempre o mesmo:

Conclusão

O padrão de projeto Singleton é bem conhecido, e também muito polêmico.

singleton meme

Há diversas críticas ao padrão, e muitos o consideram um anti-pattern.

Eu sinceramente nunca vi ninguém pessoalmente escrevendo um Singleton em Python, apesar de infelizmente já ter visto arquiteturas inteiras baseadas em singletons em outras linguagens, como o C# por exemplo.

Apesar de não ser comum a utilização , é de extrema importância conhecer o Singleton em Python para que você possa utilizá-lo, ou então, evitar a sua implementação durante o seu dia a dia.

E ai, gostou do artigo? Ficou alguma dúvida? Não deixe de comentar abaixo!

Abraço 😉




Leave a Reply