[Zope-dev] Extension class and __init__
Ross Boylan
RossBoylan@stanfordalumni.org
Mon, 22 Jul 2002 00:30:34 -0700
I had the bright idea of defining a mixin class whose methods I
thought I could use in my regular Zope product classes:
class AMixin:
def __init__(self):
blah, blah blah
class B(AMixin, Persistent, Folder, ....):
def __init__(self):
# do some of my own stuff
AMixin.__init__(self)
This fails with the warning (as I recall) that the unbound method
AMixin.__init__ needs to be called with an instance as its first
argument. (I've stripped the example down to give what I think are
the essentials).
self in the context of B is an Extension class, and I'm guessing this
is making AMixin unhappy because it's not. I assume I'll have the
same problem with other methods that I attempt to access using
AMixin.foo(self).
Can anyone confirm this diagnosis? And what's the best solution?
I have redefined things
class AMixin:
def _mixin_init(self):
#stuff
class B(AMixin, .....):
def __init__(self):
#my own stuff
self._mixin_init(self)
and this seems to work, but I wonder if there's a way to get the
classes to play together better (maybe "class AMixin(ExtensionClass):"?
though since ExtensionClass is a type I guess that's not exactly it).
This was after already discovering that isinstance doesn't work with
ExtensionClass (which I see confirmed on the list, along with the fact
that ExtensionClass generally has a lot of rough spots and may be on
the way out). This is with Zope 2.5.1.