Inheriting from Python list object(type?)

km srikrishnamohan at gmail.com
Wed May 23 13:37:00 EDT 2007


Hi,

u have the answer in ur question itself :) u dont need to redefine list
methods again - just inherit from the builtin-list-type.

try this with new style classes:

#### code ###
class Point(list):
    def __init__(self,x,y):
        super(Point, self).__init__()
        self.x = x
        self.y = y


p  = Point(2,3)
print dir(p)
print type(p)
#### code ####

regards
KM
----------------------------------------------------------------------------------------------
On 23 May 2007 09:58:36 -0700, Mangabasi <mangabasi at gmail.com> wrote:
>
> Howdy,
>
> I would like to create a Point class that lets me use Point instances
> like the following example.
>
> >>> p = Point(3, 4)
> >>> p.x
> 3
> >>> p.y
> 4
> >>> p.z
> 1
> >>> p[0]
> 3
> >>> p[1]
> 4
> >>> p[1] = 5
> >>> p.y
> 5
> >>>
>
> other than the x, y, z attributes, these instances should behave like
> regular Python lists.  I have created something like :
>
> class Point:
>     def __init__(self, x, y, z = 1):
>         self.list = [x, y, z]
>
>     def __repr__(self):
>         return str(self.list)
>
>     def __str__(self):
>         return str(self.list)
>
>     def __getattr__(self, name):
>         if name == 'x':
>             return self.list[0]
>         elif name == 'y':
>             return self.list[1]
>         elif name == 'z':
>             return self.list[2]
>         else:
>             return self.__dict__[name]
>
>     def __setattr__(self, name, value):
>         if name == 'x':
>             self.list[0] = value
>         elif name == 'y':
>             self.list[1] = value
>         elif name == 'z':
>             self.list[2] = value
>         else:
>             self.__dict__[name] = value
>
>     def __getitem__(self, key):
>          return self.list[key]
>
>     def __setitem__(self, key, value):
>             self.list[key] = value
>
>     def __getslice__(self, i, j):
>         return self.list[i : j]
>
>     def __setslice__(self, i, j, s):
>         self.list[i : j] = s
>
>     def __contains__(self, obj):
>         if obj in self.list:
>             return True
>         else:
>             return False
>
>
> There must be a way to inherit from the list type without having to
> redefine all the methods and attributes that regular lists have.
>
> i.e.
>
> class Point(list):
>    ...
>
>
> Can someone provide an example?
>
> Thanx in advance
>
> --
> http://mail.python.org/mailman/listinfo/python-list
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20070523/39dd7795/attachment.html>


More information about the Python-list mailing list