Dada uma classe Python que será instanciada apenas uma vez, ou seja, haverá apenas um objeto da classe. Eu queria saber em quais casos, faz sentido criar uma instância de classe única em vez de trabalhar diretamente com a classe.
Há uma pergunta semelhante , mas tem um foco diferente:
- trata-se de agrupar variáveis e funções globais em uma classe e
- Não é específico do Python. O último significa que não considera o fato de que (em Python) as classes também são objetos.
ATUALIZAR:
No Python, eu posso fazer o seguinte com classes e objetos:
class A(object):
pass
A.some_state_var = True
# Then later
A.some_state_var = False
my_a = A()
my_a.some_state_var = True
# Then later
my_a.some_state_var = False
Portanto, não vejo como a escolha entre uma classe e uma instância dessa classe é sobre estado (em Python). Eu posso manter um estado com qualquer um dos dois.
Além disso, a motivação para criar minha classe / instância de classe não é impor um requisito Singleton.
Além disso, não se trata tanto de criar um novo tipo.
A motivação é agrupar códigos e dados relacionados e ter uma interface para eles. Foi por isso que inicialmente o modelei como uma classe em um diagrama de classes. Somente quando se tratou da implementação, comecei a me perguntar se instanciaria essa classe ou não.
fonte
Essa é uma daquelas coisas que causará uma guerra religiosa se você se envolver muito nela.
Mas, em geral, uma prática que já vi muitas vezes é que os métodos de classe devem se preocupar apenas em criar instâncias dessa classe.
Se você pensa sobre o que é uma classe, qual é seu objetivo / comportamento, isso faz sentido. O objetivo de uma classe é criar instâncias de objetos baseados em si mesmos . É um projeto que também pode construir o edifício. Uma classe "Usuário" cria objetos "usuário". Uma classe "Dog" cria objetos "dog" etc etc
Dado que esse é o comportamento de uma classe, faz sentido que os métodos adicionados à classe "X" se preocupem em criar objetos "x".
Portanto, mesmo que você precise apenas de um objeto "x", você ainda deve instancia-lo.
Adicionar métodos à classe X que não estejam relacionados à criação de instâncias de objetos "x" pode levar a códigos inesperados confusos. É claro que existem muitos exemplos no mundo real em que as pessoas fizeram isso de qualquer maneira, mas, como eu disse, esse caminho leva à guerra religiosa.
fonte