Trouble with inheritance and self

Gerhard Häring gerhard.haering at opus-gmbh.net
Fri Jan 17 08:18:39 EST 2003


Boethius <boethius at techie.com> wrote:
> I have 2 classes (A and B). Both have a render method that returns a
> string.
> The only difference between A and B's render is the first part of the
> string (header).
> 
> B inherits from A and uses A's render with its own header (see code
> below).  However, I get a weird error:
> 
> Traceback (most recent call last):
>   File "<pyshell#23>", line 1, in ?
>     b.render()
>   File "<pyshell#19>", line 7, in render
>     return A.render(self, header=self._header)
>   File "<pyshell#17>", line 7, in render
>     return header(self) + 'Foo Bar Baz'
> TypeError: _header() takes exactly 1 argument (2 given)
> 
> What am I doing wrong? O:-)
> TIA
> 
> ---------code-------------------------------------------------------
> class A(object):
> 
>     def _header(self):
>         return "A's header"
> 
>     def render(self, header = _header):
>         return header(self) + 'Foo Bar Baz'
> 
> class B(A):
> 
>     def _header(self):
>         return "B's header"
> 
>     def render(self):
>         return A.render(self, header=self._header)

B's render method should be:

#v+
def render(self):
    return A.render(self, header=B._header)
#v-

IOW you need to pass the unbound method instead of the instance method.

Gerhard
-- 
Gerhard Häring
OPUS GmbH München
Tel.: +49 89 - 889 49 7 - 32
http://www.opus-gmbh.net/




More information about the Python-list mailing list