Прохождение классов (создание слоев)

1

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

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

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

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

Язык - это Python 3, FWIW.

  • 0
    Кто-то должен был предложить перегрузку __new__ . Это был бы более эффективный способ сделать это, чем когда все экземпляры A разделяют мнение.
Теги:
database
python-3.x
oop

2 ответа

4
Лучший ответ

Используйте Borg вместо Singleton.

>>> class Borg( object ):
...     __ss = {}
...     def __init__( self ):
...             self.__dict__ = self.__ss
...
>>> foo = Borg()
>>> foo.x = 1
>>> bar = Borg()
>>> bar.x
1
  • 0
    Ты узнаешь что-то новое каждый день...
  • 0
    Интересно. Таким образом, я предполагаю, что я сделаю A подклассом Borg, а затем BE подклассами A? Приятно.
Показать ещё 1 комментарий
0

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

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

  • 0
    Использование «глобальных» превращает мой живот. Я фактически сделал нечто подобное, хотя и использовал «shared.py», где F назначает экземпляр A, который берется BE.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню