I think I found the answer: http://www.digicool.com/releases/ExtensionClass/ExtensionClass.html Changing the code for Zope to B.Zope: #--nothing.py-- <Various imports, etc.> from ExtensionClass import Base ###Added import supernothing class nothing(Base, ###Added supernothing.Supernothing, ##Changed position Acquisition.Implicit, Persistent, AccessControl.Role.RoleManager, OFS.SimpleItem.Item ): """Blank skeleton class. """" <Various manage settings, etc> def __init__(self,id,title,greeting): self.id=id self.title=title nothing.inheritedAttribute('__init__')(self,greeting) ##Changed <the rest...> Fixes it. All I can guess is that my base class and the Zope base classes were clashing somehow? I won't even try to pretend that I understand. ;^) Back to the mill... John Jarvis
-----Original Message----- From: TFE MMS JARVIS JOHN [SMTP:jarvis.sd082@ex.tel.co.jp] Sent: Monday, April 12, 1999 4:16 PM To: zope@zope.org Subject: [Zope] Inheritance and __init__
Hi!
I'm kind of stuck: I'm trying to write a product that is a subclass of some other class that I wrote for something else. I'm having a problem with calling the superclass's __init__ method from within the subclass's __init__ method.
It works within Python but not Zope. ?
I don't have any comprehensible code to show, so here's some test code I've been using:
The superclass:
#--supernothing.py-- class Supernothing: def __init__(self,greeting="hello"): self.greeting=greeting
def sayhi(self): return self.greeting
The subclasses look something like:
A.Python only: #--subnothing.py -- import supernothing class Subnothing(supernothing.Supernothing): def __init__(self,greeting="I'm here!"): supernothing.Supernothing.__init__(self,greeting)
B.Zope: #--nothing.py-- <Various imports, etc.> import supernothing class nothing(Acquisition.Implicit, Persistent, AccessControl.Role.RoleManager, OFS.SimpleItem.Item, supernothing.Supernothing): """Blank skeleton class.
""""
<Various manage settings, etc>
def __init__(self,id,title,greeting): self.id=id self.title=title supernothing.Supernothing.__init__(self,greeting) # This is line 50
<bunch of other stuff>
def addNothing(self,id,title,REQUEST=None,greeting='I am nothing!'): """Add a Nothing object.
""" obj=nothing(id,title, greeting) self._setObject(id,obj)
<the rest...>
Version A works (in the Python interpreter, of course). Version B gives an error(in Zope): Traceback (innermost last): File /usr/lib/python1.5/ZPublisher/Publish.py, line 877, in publish_module File /usr/lib/python1.5/ZPublisher/Publish.py, line 590, in publish (Info: /queries/pictest/manage_addNothing) File /usr/lib/python1.5/Products/nothing/nothing.py, line 81, in addNothing (Object: Navigation) File /usr/lib/python1.5/Products/nothing/nothing.py, line 50, in __init__ (Object: RoleManager) TypeError: unbound method must be called with class instance 1st argument
Can anyone see what I am missing here?
TIA! John Jarvis
_______________________________________________ Zope maillist - Zope@zope.org http://www.zope.org/mailman/listinfo/zope
(For developer-specific issues, use the companion list, zope-dev@zope.org - http://www.zope.org/mailman/listinfo/zope-dev )