Luciano Ramalho wrote: > 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. >
You are actually hard-coding it here too, "class SubClass(BaseClass):" has "BaseClass" hard-coded. All you do here is hard-code it once instead of twice. > Cheers, > > Luciano > > > On Tue, Mar 18, 2008 at 9:37 PM, John Fouhy <[EMAIL PROTECTED]> wrote: >> On 19/03/2008, Allen Fowler <[EMAIL PROTECTED]> 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@python.org >> http://mail.python.org/mailman/listinfo/tutor >> > _______________________________________________ > Tutor maillist - Tutor@python.org > http://mail.python.org/mailman/listinfo/tutor > _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor