On Thursday November 15, 2007, Tom wrote: > I am trying to understand what happens in the following scenario: > > class Sub_class(Base_class): > def __init__(self, data): > Base_class.__init__(self, data) > > as in: > > # snippet from http://viner.tv/go?set > class Set(list): > def __init__(self, value = []): > list.__init__([])
Tom, Indeed, that first line of the Set constructor body is invoking the constructor for the base class (list, in this case). The reason that the value parameter is NOT being directly sent to the base class is that there is a desire to avoid allowing potentially duplicate elements into something that is representing a set. However, it was entirely unnecessary for them to send an empty list as a parameter. It would suffice to have written list.__init__() It is important to have the call to the base class initializer because we need to allow for the internal state of the underlying list to be properly intitialized. Please note that the original source for this from viner.tv has an important fourth line: class Set(list): def __init__(self, value = []): list.__init__([]) self.concat(value) # copies mutable default That fourth line uses a custom method defined later to insert designated values into the set while making sure to avoid duplicates. With regard, Michael _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor