I'm trying to override manage_beforeDelete(self,item,container) in a python class that inherits CatalogAware. The overriding manage_beforeDelete calls the base class function: from Products.ZCatalog.CatalogAwareness import CatalogAware class Workflow(CatalogAware): def manage_beforeDelete(self,item,container): """ """ ... CatalogAware.manage_beforeDelete(self, item, container) I get this error message: Error Type: TypeError Error Value: unbound method must be called with class instance 1st argument -- Itamar S.T. itamars@ibm.net
The error stems from the use of ExtensionClass, this snippet from http://www.digicool.com/releases/ExtensionClass explains : ---------------------------------------------------------------------------- -------------------- A problem occurs when trying to override methods inherited from Python base classes. Consider the following example: from ExtensionClass import Base class Spam: def __init__(self, name): self.name=name class ECSpam(ExtensionClass.Base, Spam): def __init__(self, name, favorite_color): Spam.__init__(self,name) self.favorite_color=favorite_color This implementation will fail when an ECSpam object is instantiated. The problem is that ECSpam.__init__ calls Spam.__init__, and Spam.__init__ can only be called with a Python instance (an object of type "instance") as the first argument. The first argument passed to Spam.__init__ will be an ECSpam instance (an object of type ECSPam). ---------------------------------------------------------------------------- -------------------- In order to access the base you need to use : B.inheritedAttribute('__init__')(self,some, more) OR in your case CatalogAware.inheritedAttribute( 'manage_beforeDelete' )(self, item, container) Unfortunately, this currently only works in single inheritance hierarchies. Robert Leftwich
-----Original Message----- From: itamar@localhost.localdomain [mailto:itamar@localhost.localdomain]On Behalf Of Itamar Shtull-Trauring Sent: Sunday, 28 November 1999 22:15 To: zope-dev@zope.org Subject: [Zope-dev] Calling from an Overriding function
I'm trying to override manage_beforeDelete(self,item,container) in a python class that inherits CatalogAware. The overriding manage_beforeDelete calls the base class function:
from Products.ZCatalog.CatalogAwareness import CatalogAware
class Workflow(CatalogAware):
def manage_beforeDelete(self,item,container):
""" """
...
CatalogAware.manage_beforeDelete(self, item, container)
I get this error message:
Error Type: TypeError Error Value: unbound method must be called with class instance 1st argument
-- Itamar S.T. itamars@ibm.net
_______________________________________________ Zope-Dev maillist - Zope-Dev@zope.org http://lists.zope.org/mailman/listinfo/zope-dev No cross posts or HTML encoding! (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )
participants (2)
-
Itamar Shtull-Trauring -
Robert Leftwich