Negroup - wrote: > I have this class: > >>>>class A: > > ... def __init__(self, blank=False, editable=True, name='foo'): > ... self.blank = blank > ... self.editable = editable > ... self.name = name > ... > >>>>a = A() >>>>a.blank, a.editable, a.name > > (False, True, 'foo') > > All as expected. > > Now I want that another class, call it B, inherits all > behaviours/attributes except for the attribute blank, that now I want > to be False. > > This should be possible overriding __init__ method no? > >>>>class B(A): > > ... def __init__(self, blank=True, editable=True, name='foo'): > ... self.blank = blank > ... self.editable = editable > ... self.name = name > ... > >>>>b = B() >>>>b.blank, b.editable, b.name > > (True, True, 'foo') > > However, is it possible to achieve this without rewrite the whole > __init__ method, but just overriding parts of it?
The usual way to do this is to forward to the __init__() method of the superclass for the common part. In your case you are just specializing the default arguments so all you have to do is pass the args to A.__init__(): class B(A): def __init__(self, blank=True, editable=True, name='foo'): A.__init__(self, blank, editable, name) Kent _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor