DEV Community

Michel Moreira
Michel Moreira

Posted on • Updated on

Padrão Singleton em Python

Singleton é um padrão de projeto criacional, ele é utilizado quando há necessidade de que uma classe seja única, evitando que ela seja instanciada várias vezes e criando um ponto de acesso global para essa instância.

Exemplo de código em Python

class SingletonMeta(type):
    _instances = {}

    def __call__(cls, *args, **kwargs):
        if cls not in cls._instances:
            instance = super().__call__(*args, **kwargs)
            cls._instances[cls] = instance
        return cls._instances[cls]
Enter fullscreen mode Exit fullscreen mode

Neste trecho de código é definido a metaclasse SingletonMeta, esta é a representação do que a classe Singleton será quando instanciada. O método call determina que esta classe pode ser chamada como uma função.

class Singleton(metaclass=SingletonMeta):
    def some_business_logic(self):
Enter fullscreen mode Exit fullscreen mode

A classe Singleton representa uma instância de singleton e deve possuir métodos para execução das suas lógicas de negócio.

Python pode implementar o padrão Singleton de diversas maneiras, neste exemplo foi usado o método de metaclasse. Uma metaclasse é "uma classe de uma classe", ou seja, é criado uma classe que determina como uma classe deve se comportar, esta sendo uma instância da metaclasse.


Referências
Padrões de Projeto (Diogo Moreira, 2020)
Mergulho nos Padrões de Projeto - v2020-1.14 (Alexander Shvets, 2020)
Os códigos usados como exemplo foram retirados do livro Mergulho nos Padrões de Projeto.

Top comments (1)

Collapse
 
yvesnrb profile image
yvesnrb

Boa explicação, que bom ver um post em português por aqui!