Прохождение класса экземпляров (расслоение) - PullRequest
1 голос
/ 31 августа 2010

Дизайн программы:

  • Класс A, который реализует обработку данных более низкого уровня
    • Классы BE, которые предоставляют интерфейс более высокого уровня для A для выполнения различных функций
      • Класс F, который является объектом пользовательского интерфейса, который взаимодействует с BE в соответствии с пользовательским вводом

В любой момент времени может быть только один экземпляр A, чтобы избежать гонки, повреждения данных и т. д.

Каков наилучший способ предоставить копию A для BE?В настоящее время F создает экземпляр A и сохраняет его на протяжении всей жизни программы, передавая его в BE при их создании.С другой стороны, я мог бы создать глобально доступный модуль с общей копией A, который все использует.Другой альтернативой является создание подклассов BE для A, но это нарушает ограничение только одного A (поскольку каждый подкласс будет, так сказать, собственным обработчиком данных).

Язык Python 3, FWIW.

Ответы [ 2 ]

4 голосов
/ 31 августа 2010

Используйте Борг вместо синглтона.

>>> class Borg( object ):
...     __ss = {}
...     def __init__( self ):
...             self.__dict__ = self.__ss
...
>>> foo = Borg()
>>> foo.x = 1
>>> bar = Borg()
>>> bar.x
1
0 голосов
/ 01 сентября 2010

Как насчет использования методики модуля, это намного проще.

в модуле "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 и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...