Вот проблема, которую я пытаюсь решить (я упростил актуальную проблему, но это должно дать вам всю необходимую информацию). У меня есть иерархия, как так:Hierarchy/Flyweight/Instancing Problem in Python
1.A
1.B
1.C
2.A
3.D
4.B
5.F
(Это трудно для иллюстрации - каждое число является родителем, каждая буква является ребенок).
Создание экземпляра объектов «letter» дорого (IO, стоимость базы данных и т. Д.), Поэтому это должно выполняться только один раз.
Иерархия должна быть легко ориентирована.
Дети в иерархии должны иметь только одного родителя.
Изменение содержимого объектов букв должно быть возможным непосредственно из объектов в иерархии.
Должен быть центральный магазин, содержащий все объекты «письма» (и только те, что находятся в иерархии).
Объекты «письмо» и «номер» должны быть доступны для создания из конструктора (например, Letter (** kwargs)).
Совершенно приемлемо ожидать, что при изменении буквы из иерархии все остальные буквы будут соблюдать одно и то же изменение.
Надеюсь, что это не слишком абстрактно, чтобы проиллюстрировать проблему.
Какой был бы лучший способ решить это? (Тогда я вывешу мое решение)
Вот пример сценария:
one = Number('one')
a = Letter('a')
one.addChild(a)
two = Number('two')
a = Letter('a')
two.addChild(a)
for child in one:
child.method1()
for child in two:
print '%s' % child.method2()
Как это иерархия? Это похоже на простую связь между «числом» и «буквой». –
Снова я просто пытаюсь показать вам подмножество проблемы (это на самом деле иерархия типа 1.ABCD), потому что фактические данные намного сложнее, чем это, специфичные для приложения, и потребуют много работы для объясните, поэтому я пытаюсь представить эту абстрагированную от нерелевантных сложностей. – Dan
Не могли бы вы написать предложение или две справочной информации о фактическом проблемном домене. Я боюсь, что вы поставили вопрос настолько абстрактным, что людям трудно понять это. –