Am Mittwoch, den 19.03.2008, 10:36 -0300 schrieb Ricardo Aráoz: > 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.
Yes and no. Yes a human has specified the relationships. But you do not have to specify what other baseclasses your class has. This is relevant for multiple inheritence, like: D => B => A D => C => A The problem is mostly hiding implementation details. Using super, you just let Python pick the "next" class to give control. Using B.__init__ and C.__init__, A.__init__ would be called twice. Andreas > > > 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
signature.asc
Description: Dies ist ein digital signierter Nachrichtenteil
_______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor