Me gustaría implementar algún tipo de patrón singleton en mi programa Python. Estaba pensando en hacerlo sin usar clases; es decir, me gustaría poner todas las funciones y variables relacionadas con singleton dentro de un módulo y considerarlo como un singleton real.Python: pensando en un módulo y sus variables como singleton - ¿Enfoque limpio?
Por ejemplo, dicen que esto es estar en el 'singleton_module.py' file:
# singleton_module.py
# Singleton-related variables
foo = 'blah'
bar = 'stuff'
# Functions that process the above variables
def work(some_parameter):
global foo, bar
if some_parameter:
bar = ...
else:
foo = ...
A continuación, el resto del programa (es decir, otros módulos) sería utilizar este producto único de este modo:
# another_module.py
import singleton_module
# process the singleton variables,
# which changes them across the entire program
singleton_module.work(...)
# freely access the singleton variables
# (at least for reading)
print singleton_module.foo
Esto parece ser una buena idea para mí, ya que se ve bastante limpio en los módulos que utilizan el singlete en.
Sin embargo, todas estas afirmaciones "globales" tediosas en el módulo singleton son feas. Ocurren en cada función que procesa las variables relacionadas con singleton. Eso no es mucho en este ejemplo en particular, pero cuando tienes más de 10 variables para administrar en varias funciones, no es bonito.
Además, esto es bastante propenso a errores si olvida los enunciados globales: se crearán variables locales para la función, y las variables del módulo no se modificarán, ¡que no es lo que quiere!
Entonces, ¿esto se consideraría limpio? ¿Existe un enfoque similar al mío que logra eliminar el desastre "global"?
¿O simplemente no es el camino a seguir?
¿Por qué necesita un singleton en primer lugar. Parece que el 90% de las personas que piensan que quieren/necesitan un singleton realmente no. – delnan
Bueno, por supuesto que realmente * no necesito * un singleton. Solía usar una clase y funcionó bien, pero pensé, ya que solo tengo una instancia de esta clase en particular, ¿no podría convertirla en singleton? –
Bueno, dado que ya descubrió un problema con el singleton, yo diría que la clase gana;) – delnan