Моя проблема:
Я хотел бы добавить к классу Composite объекты Leaf, созданные во время выполнения внутри
составная процедура, подобная этой:
def update(self, tp, msg, stt):
"""It updates composite objects
"""
d = Leaf()
d.setDict(tp, msg, stt)
self.append_child(d)
return self.status()
Внутри основной:
import lib.composite
c = Composite()
for i in range(0,10):
c.update(str(i), msg, stt)
и составной это:
class Composite(Component):
def __init__(self, *args, **kw):
super(Composite, self).__init__()
self.children = []
def append_child(self, child):
self.children.append(child)
def update(self, tp, msg, stt):
d = Leaf()
d.setDict(tp, msg, stt)
self.append_child(d)
return self.status()
def status(self):
for child in self.children:
ret = child.status()
if type(child) == Leaf:
p_out("Leaf: %s has value %s" % (child, ret))
class Component(object):
def __init__(self, *args, **kw):
if type(self) == Component:
raise NotImplementedError("Component couldn't be "
"instantiated directly")
def status(self, *args, **kw):
raise NotImplementedError("Status method "
"must be implemented")
class Leaf(Component):
def __init__(self):
super(Leaf, self).__init__()
self._dict = {}
def setDict(self, type, key, value)
self._dict = { type : { key : value } }
def status(self):
return self._dict
Но таким образом я всегда обнаруживал, что в моем композите добавлен только один лист ("d"), даже если
обновление вызывалось много раз.
Как я могу написать такую подпрограмму, чтобы можно было заполнять составной во время выполнения?