[Zope] Sub Class Question

R. David Murray bitz@bitdance.com
Fri, 25 Aug 2000 20:22:24 -0400 (EDT)


On Fri, 25 Aug 2000, Daniel Rusch wrote:
>     def __call__(self, client=None, REQUEST={}, RESPONSE=None, **kw):
>         print 'Sub Class __call__'
>         DTMLMethod.__call__(self, client, REQUEST, RESPONSE, kw)
[...]
> when I view the BasicMethod in Zope, I get:
> Error Type: TypeError 
> Error Value: too many arguments; expected 4, got 5
> 
> I believe that I need the self arg, if I remove it I get an unbound
> python method error.
> 
> Any thoughts???

DTMLMethod's __call__ only takes three arguments: client, REQUEST,
and RESPONSE.  **kw turns any additional keyword arguments (x=y)
into a dictionary kw.  To pass the ones your __call__ receives on
to DTMLMethod's __call__, you have to turn them back into a keyword
list somehow.  A quick check of the python language reference
doesn't reveal any special syntactic sugar for doing this.  However,
in the definition of __call__ in DTMLMethod I found this:

r = apply(HTML.__call__, (self, client, REQUEST), kw)

Reading about apply in the python docs, it's obviously designed to
do just the job you need <grin>.

--RDM