Newbie References Question

Frank Sonnenburg sonnenbu at informatik.uni-bonn.de
Wed Sep 25 16:09:19 EDT 2002


"Guy Rabiller" <grabiller at 3dvf.net> schrieb im Newsbeitrag
news:3d91c72f$0$8558$79c14f64 at nan-newsreader-02.noos.net...
> Hi,
>
> let say I have:
> i1 = 1
> i2 = 2
> and
> p = [i1,i2]
>
> How can I have:
> p=[*i1,*i2]
> rather than
> p=[**i1,**i2] as it is curently ?
>
> ( Sorry for this nasty hybrid syntax )
>
> Textualy, how if I want that p[0] refere to the 'i1' container, and not to
> the refererence it contains ?
>
> What I want is that if now I set:
> i1 = 4
> that automaticaly:
> p -> [4,2]
> and not keeping [1,2]

My proposal: THINK OO!

In my opinion, this is an excellent example to use the full power of object
oriented programming. Of course, this is a lot of overhead and maybe you
just wanted a very short approach. But since you told, you are a newbie,
maybe you are not quite used to this style of programming. Just try out and
experiment a little.

===============================================================

# Module point.py


class Point:
        def __init__(self, x=0, y=0):
                self._x = x
                self._y = y

        def __repr__(self):
                return 'Point (%d,%d)' % (self._x, self._y)

        def short_repr(self):
                return '(%d,%d)' % (self._x, self._y)

        def set(self, x, y):
                self._x = x
                self._y = y

class Figure:
        def __init__(self, *points):
                self._points = []
                for p in points:
                        if not isinstance(p, Point):
                                raise TypeError
                        self._points.append(p)

        def __repr__(self):
                s = 'Figure'
                # Derived class instance?
                classname = self.__class__.__name__
                if classname != 'Figure':
                        s = s + ' (%s)' % classname
                if self._points:
                        s = s + ', def. by'
                        for p in self._points:
                                s = s + ' '+p.short_repr()
                else:
                        s = s + ', no points defined'

                return s


        #
        # Now it's your turn ;-)
        #

        # def set, get, remove, ......
        #       ...


class Quad(Figure):
        def __init__(self, p0=Point(0,0), p1=Point(0,1), p2=Point(1,0),
p3=Point(1,1)):
                Figure.__init__(self, p0, p1, p2, p3)

        def set_point(self, index, point):
                if type(index) != type(0) or index < 0 or index > 3:
                        raise ValueError
                if not isinstance(point, Point):
                        raise TypeError

                self._points[index] = point

===============================================================

>>> from point import *
>>> q = Quad()
>>> q
Figure (Quad), def. by (0,0) (0,1) (1,0) (1,1)
>>> q.set_point(1,Point(555,888))
>>> q
Figure (Quad), def. by (0,0) (555,888) (1,0) (1,1)

>>> p = Point(1,2)
>>> p.set(4,2)
>>> p
Point (4,2)

===============================================================


Frank





More information about the Python-list mailing list