Sollte man hier schon das Observer-Pattern verwenden...?
Verfasst: Samstag 13. August 2011, 19:43
Hallo,
wie würdet ihr vorgehen?
So...
... oder so ...
Ist die erste Variante insofern in Ordnung, dass hier Timeframe() quasi 'unter der Hand' aktuell gehalten wird oder sollte, wie in meiner zweiten Variante ein 'Schmalspur-Observer-Pattern' verwendet werden?
mutetella
wie würdet ihr vorgehen?
So...
Code: Alles auswählen
class Timeframe(object):
def __init__(self, years, months, days):
self.years = years
self.months = months
self.days = days
class Picker(object):
def __init__(self):
self.picked = []
def pick(self, item):
do_it = self.picked.remove if \
item in self.picked else self.picked.append
do_it(item)
def __iter__(self):
for item in self.picked:
yield item
def __len__(self):
return len(self.picked)Code: Alles auswählen
>>> y = Picker()
>>> m = Picker()
>>> d = Picker()
>>> t = Timeframe(y, m, d)
>>> y.pick(2011)
>>> t.years
[2011]Code: Alles auswählen
class Timeframe(object):
def __init__(self):
self.years = None
self.months = None
self.days = None
def update(self, years=None, months=None, days=None):
if years:
self.years = years
if months:
self.months = months
if days:
self.days = days
class Picker(object):
def __init__(self):
self.picked = []
def pick(self, item):
do_it = self.picked.remove if \
item in self.picked else self.picked.append
do_it(item)
self.notify(self)
def set_notifier(self, notifier):
self.notify = notifier
def __iter__(self):
for item in self.picked:
yield item
def __len__(self):
return len(self.picked)Code: Alles auswählen
>>> y = Picker()
>>> m = Picker()
>>> d = Picker()
>>> t = Timeframe()
>>> y.set_notifier(t.update)
>>> m.set_notifier(t.update)
>>> d.set_notifier(t.update)
>>> y.pick(2011)
>>> t.years
[2011]mutetella