Dada una clase de Python que se instanciará solo una vez, es decir, solo habrá un objeto de la clase. Me preguntaba en qué casos tiene sentido crear una sola instancia de clase en lugar de trabajar directamente con la clase.
Hay una pregunta similar , pero tiene un enfoque diferente:
- se trata de agrupar variables y funciones globales en una clase y
- No es específico de Python. Esto último significa que no considera el hecho de que (en Python) las clases también son objetos.
ACTUALIZAR:
En Python, puedo hacer lo siguiente con clases y 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
Entonces, no veo cómo la elección entre una clase y una instancia de esa clase se trata del estado (en Python). Puedo mantener un estado con cualquiera de los dos.
Además, la motivación para crear mi clase / instancia de clase no se trata de hacer cumplir un requisito de Singleton.
Además, no se trata tanto de crear un nuevo tipo.
La motivación es agrupar código y datos relacionados y tener una interfaz para ello. Es por eso que inicialmente lo modelé como una clase en un diagrama de clase. Solo cuando se trataba de la implementación comencé a preguntarme si crear una instancia de esta clase o no.
fuente
Esta es una de esas cosas que provocarán una guerra religiosa si te involucras demasiado.
Pero, en general, una práctica que he visto muchas veces es que los métodos de clase deberían preocuparse solo de crear instancias de esa clase.
Si piensa en qué es una clase, cuál es su propósito / comportamiento, entonces tiene sentido. El propósito de una clase es crear instancias de objetos que se basan en sí mismo . Es un plan que también puede construir el edificio. Una clase "Usuario" crea objetos "usuario". Una clase "Dog" crea objetos "dog", etc.
Si este es el comportamiento de una clase, tiene sentido, entonces, los métodos que agregue a la clase "X" se ocuparán de crear objetos "x".
Entonces, incluso si solo va a necesitar un objeto "x", debe instanciarlo.
Agregar métodos a la clase X que no están relacionados con la creación de instancias de objetos "x" puede generar un código inesperado confuso. Por supuesto, hay toneladas de ejemplos en el mundo real donde la gente ha hecho esto de todos modos, pero como dije, ese camino conduce a la guerra religiosa.
fuente