+ :note: The listener is held by Publisher() only by *weak* reference.
+ This means you must ensure you have at least one strong reference
+ to listener, otherwise it will be DOA ("dead on arrival"). This is
+ particularly easy to forget when wrapping a listener method in a
+ proxy object (e.g. to bind some of its parameters), e.g.
+
+ :code:
+ class Foo:
+ def listener(self, event): pass
+ class Wrapper:
+ def __init__(self, fun): self.fun = fun
+ def __call__(self, *args): self.fun(*args)
+ foo = Foo()
+ Publisher().subscribe( Wrapper(foo.listener) ) # whoops: DOA!
+ wrapper = Wrapper(foo.listener)
+ Publisher().subscribe(wrapper) # good!
+