[Tutor] Calling super classs __init__?

Luciano Ramalho luciano at ramalho.org
Wed Mar 19 04:45:33 CET 2008


Nowadays the best practice for invoking a method from all superclasses
(yes, multiple inheritance) is this:

class SubClass(BaseClass):
    def __init__(self, t, *args, **kw):
        super(SubClass, self).__init__(*args, **kw)
        # do something with t

That way you let Python decide which superclasses your SubClass has,
instead of hard-coding it in several places.

Cheers,

Luciano


On Tue, Mar 18, 2008 at 9:37 PM, John Fouhy <john at fouhy.net> wrote:
> On 19/03/2008, Allen Fowler <allen.fowler at yahoo.com> wrote:
>  >  I have a super class that accepts many arguments to it's constructor, and a subclass that should define one additional argument.
>  >
>  >  What's the most "pythonic" way to make this work?
>
>  class BaseClass(object):
>   def __init__(self, x, y, z, foo='foo'): # whatever
>      # etc
>
>  class SubClass(BaseClass):
>   def __init__(self, t, *args, **kw):
>     BaseClass.__init__(self, *args, **kw)
>     # do something with t
>
>  This does mean that the special sub class argument has to come before
>  the base class arguments when you create instances.
>
>  Whether you call BaseClass.__init__ early or late in the subclass init
>  method could depend on what your classes are doing.  Remember, in
>  Python, __init__ only initializes objects, it doesn't create them.
>  It's just another bit of code that you can call whenever you want.
>
>  --
>  John.
>
>
> _______________________________________________
>  Tutor maillist  -  Tutor at python.org
>  http://mail.python.org/mailman/listinfo/tutor
>


More information about the Tutor mailing list