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