Asegúrese de que solo se ejecute una instancia de una clase

Tengo una clase subyacente que quiero colocar en algún código. Solo quiero que se cree una instancia o que se inicie una vez para una aplicación determinada, aunque podría llamarse muchas veces. El problema con el código siguiente es que LowClass se inicia una y otra vez. Solo quiero que empiece una vez por prueba ..

import logging class LowClass: active = False def __init__(self): self.log = logging.getLogger() self.log.debug("Init %s" % self.__class__.__name__) if self.active: return else: self.active = True self.log.debug("Now active!") class A: def __init__(self): self.log = logging.getLogger() self.log.debug("Init %s" % self.__class__.__name__) self.lowclass = LowClass() class B: def __init__(self): self.log = logging.getLogger() self.log.debug("Init %s" % self.__class__.__name__) self.lowclass = LowClass() class C: def __init__(self): self.log = logging.getLogger() self.log.debug("Init %s" % self.__class__.__name__) self.a = A() self.b = B() class ATests(unittest.TestCase): def setUp(self): pass def testOne(self): a = A() b = B() def testTwo(self): c = C() 

Gracias por señalar mi problema !!

Ver singleton en python .

Busque “patrón de singleton”. Parece que estás tratando con Python, así que quizás tengas que buscar un poco más. Ahora hay muchos ejemplos en C ++.

Lo que necesitas es implementar el patrón de diseño de Singleton en python

He encontrado esta implementación espero que ayude

Cuando importas un módulo en python, es natural singleton. Por ejemplo, en util.py, tienes:

  class MyClass(object): ...... g_my_obj = MyClass() 

en a.py, importas g_my_obj:

 from util import g_my_obj 

en b.py, importas g_my_obj de nuevo:

 from util import g_my_obj 

De forma segura, solo se ha creado un g_my_obj sin importar cuántas veces lo importe.

Creo que el problema con el código mostrado es que establece self.active=True . Esto creará un atributo para la instancia y lo establecerá en True , mientras que creo que desea establecer el activo de la clase en True . Entonces, en lugar de self.active=True , intente self.__class__.active=True .