On Aug 30, 8:24 pm, [EMAIL PROTECTED] wrote: > On Aug 30, 12:18 pm, Wildemar Wildenburger > > > > <[EMAIL PROTECTED]> wrote: > > [EMAIL PROTECTED] wrote: > > > I have read that you can derive from the base classes such as str, > > > list, dict. > > > > I guess this would look like: > > > > def MyString(str): > > > def MyList(list): > > > def MyDict(dict): > > > Well, replace 'def' with 'class' and you're right. > > > > How do you access the data that is contained in the super class? > > > This way: > > >>> class MyList(list): > > ... def do_something(self): > > ... self.append(3) > > ... print self > > ... > > >>> l = MyList((1, 2)) > > >>> l > > [1, 2] > > >>> l.do_something() > > [1, 2, 3] > > > That is: Whenever you want to refer to the value refer to self (that is, > > refer to the instance of your class). > > > /W > > Ok, thanks. > > So it's: > class MyString(str): > def __init__(self,strInput): > self = strInput
No. Well in this case it seems to work as the method str.__new__ is called first which does what you intend to do in your example. But try this: >>> class Upper(str): ... def __init__(self, s): ... self = s.upper() ... >>> Upper('camelot') 'camelot' Doesn't work (should be 'CAMELOT', shouldn't it?)! To understand why it doesn't behave as you expect, and how to achieve what you want, see "Overriding the __new__ method" in GvR's article "Unifying types and classes in Python 2.2" (http://www.python.org/ download/releases/2.2.3/descrintro/#__new__). HTH -- Arnaud -- http://mail.python.org/mailman/listinfo/python-list