Дизайн программы:
В любой момент времени может быть только один экземпляр A, чтобы избежать условий гонки, повреждения данных и т.д.
Каков наилучший способ предоставить копию A-B-E? В настоящее время F создает экземпляр A и удерживает его на протяжении всей жизни программы, передавая его B-E при их создании. В качестве альтернативы я мог бы создать глобально доступный модуль с общей копией A, которую все использует. Другой альтернативой является создание подклассов B-E класса A, но это нарушает ограничение только одного A (так как каждый подкласс будет являться их собственным обработчиком данных, так сказать).
Язык - это Python 3, FWIW.
Используйте Borg вместо Singleton.
>>> class Borg( object ):
... __ss = {}
... def __init__( self ):
... self.__dict__ = self.__ss
...
>>> foo = Borg()
>>> foo.x = 1
>>> bar = Borg()
>>> bar.x
1
Как насчет использования метода модуля, это намного проще.
в модуле "A.py"
class A(object):
def __init__(self, ..)
...
a = A()
в модуле "B.py"
from A import a
class B(object):
def __init__(self)
global a
self.a = a
Оба имеют один экземпляр a.
То же самое можно сделать и для других классов C, D, F и т.д.
__new__
. Это был бы более эффективный способ сделать это, чем когда все экземплярыA
разделяют мнение.