[IPython-dev] ipython1 and synchronous printing of stdout
Hans Meine
hans_meine at gmx.net
Thu Jul 24 04:44:45 EDT 2008
Am Dienstag, 22. Juli 2008 22:25:45 schrieb Brian Granger:
> 3. The Observer/Delegate patterns as are typical is Cocoa. I know
> that Gael is not fund of this, but I do think this pattern is much
> better than plain callbacks, as it give a nice formal structure to
> everything. Also, I agree with Barry that this pattern is pretty much
> what you get when you try to do plain callbacks properly.
>
> Thus, my own conclusion is that the Observer/Delegate pattern is
> probably the best option for us and will lead to the loose coupling
> that we need.
>
> Barry, what would it take to put together an example of this pattern?
> Will we need some amount of infrastructure to make this possible?
My experience is that a callback mechanism is easily implemented in Python as
a (standard python) list of callables that are called in turn. Optionally,
you may allow to specify priorities when adding callbacks to get the proper
order, but that looks like overkill here. This relies on Python's automatic
member function binding and duck typing (i.e. you can pass objects with a
__call__ method, normal functions, or bound member functions) and works very
well.
AFAICS, there is no big difference between supporting callbacks and the
Observer pattern; if you provide an "addOutputCallback" method that
internally appends its argument to a list of outputCallbacks, an Observer
would simply call that method and pass self (if it has a specific __call__
method) or e.g. self._watchOutput. The latter IMHO makes it so powerful
because an Observer may easily watch several different Subjects without being
forced to follow a certain interface (i.e. method names) for that.
Just my 2 cents,
Hans
PS: Forgot to press send; I actually wrote this about 24 hours ago. Looks
nearly off-topic to me now, but anyhow..
More information about the IPython-dev
mailing list