Basic Inheritance Question
Ruud de Jong
ruud.de.jong at consunet.nl
Fri Mar 19 07:47:26 EST 2004
Matthew Bell schreef:
> I've got a conceptual problem to do with inheritance.
> I'd be grateful if someone could help to clear up my
> confusion.
>
> An example. Say I need a class that's basically a
> list, with all the normal list methods, but I want a
> custom __init__ so that the list that is created is
> [1,2,3] rather than [] (yes, it's a bogus example,
> but it does to make the point). Without bothering
> with inheritance, I could do:
>
> class mysimplelistclass:
> def __init__(self):
> self.internallist = [1, 2, 3]
>
> This would work but I would, of course, need to define
> methods in "mysimpleclass" to deal with all the various
> methods that the original list class provides.
>
> Obviously, the thing to do is to inherit from the list
> class, override the __init__ method and leave the rest
> of the normal list class's methods untouched. So I'd
> write something like:
>
> class myinheritedlistclass(list):
> def __init__(self):
> <now what?>
>
> It's at this point I get confused. Obviously, I don't
> use the "self.internallist = [1, 2, 3]" bit as before
> because I'd then need to override all of the rest of
> the normal list methods to get them to act on
> self.internallist.
>
> Conceptually, I suppose I need something like:
>
> <somemagictoken> = superclass.self.__init__([1, 2, 3)]
>
> but that is, of course, totally ridiculous.
>
> Essentially, then, if I've inherited another class, how
> do I create an instance of the class I've inherited such
> that methods I haven't overrriden will still work, and
> how can I then refer to that instance from my subclass?
> I can guess it's something to do with "self" but exactly
> what, I'm really at a loss.
>
> Any assistance in my confusion would be gratefully received!
>
> Regards,
> Matthew.
>
>
You were nearly there. You don't need a <magictoken>;
__init__ does not return anything.
Just initialize the baseclass with the things you want:
>>> class myList(list):
def __init__(self):
list.__init__(self, [1,2,3])
>>> m = myList()
>>> m
[1, 2, 3]
>>>
Regards,
Ruud
More information about the Python-list
mailing list