# 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
> 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 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, ......
#       ...

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
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

```