<div>Hi,</div>
<div>&nbsp;</div>
<div>I ran across a strange problem&nbsp;using mulitple inheritance that I hope someone can explain.&nbsp; Basically, I am implementing a Publisher pattern, and when I try to add threading, the order I list Base classes matters!&nbsp; Here is the short sample code-- all help explaining this is appreciated!
</div>
<div>&nbsp;</div>
<div>Thanks,</div>
<div>Marcus</div>
<div>&nbsp;</div>
<div>---</div>
<div>import threading</div>
<div>&nbsp;</div>
<div>class Publisher(object):</div>
<div>&nbsp;&nbsp; def __init__(self): self.listeners = {}&nbsp;</div>
<div>&nbsp;&nbsp; def register(self, id, object):</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.listeners[id] = self.listeners.get(id, object)</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>
<div># This <strong>FAILS</strong> with AttributeError: 'FancyPublisher'</div>
<div># object has no attribute 'listeners'</div></div>
<div>class FancyPublisher(threading.Thread, Publisher):</div>
<div>&nbsp;&nbsp; def __init__(self):</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super(FancyPublisher, self).__init__()</div>
<div>&nbsp;</div>
<div>F = FancyPublisher()</div>
<div>F.register('me', None)&nbsp;&nbsp;&nbsp; </div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div># However, this succeeds!?</div>
<div>
<div>class FancyPublisher(Publisher, threading.Thread):</div>
<div>&nbsp;&nbsp; def __init__(self):</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super(FancyPublisher, self).__init__()</div>
<div>&nbsp;</div>
<div>F = FancyPublisher()</div>
<div>F.register('me', None)&nbsp;&nbsp;&nbsp; </div></div>