Pointers

Curtis Jensen cjensen at bioeng.ucsd.edu
Fri Mar 17 00:54:13 CET 2000


Richard Jones wrote:
> 
> [Bjorn Pettersen]
> > d = {'A':[0], 'B':[0]} # use a list as a box to put ints in
> > class A:
> >       def __init__(self):
> >               self.a = d['A']
> > class B:
> >       def __init__(self):
> >               self.b = d['B']
> > a = A()
> > b = B()
> > print a.a[0] # should be 0
> > print b.b[0] # should be 0
> > d['A'][0] = 1
> > d['B'][0] = 2
> > print a.a[0] # should be 1
> > print b.b[0] # should be 2
> 
>    This is an icky solution, but it will work :)
> 
>    A solution that looks more like what Curtis was writing would involve
> intercepting the handling of attributes in the classes 'A' and 'B', like:
> 
> >>> d={'A':0,'B':0}
> >>> class A:
> ...  def __init__(self, d):
> ...   self.d = d
> ...  def __getattr__(self, attr):
> ...   if attr == 'a':
> ...    return d['A']
> ...   return self.__dict__[attr]
> ...
> >>> class B:
> ...  def __init__(self, d):
> ...   self.d = d
> ...  def __getattr__(self, attr):
> ...   if attr == 'b':
> ...    return d['B']
> ...   return self.__dict__[attr]
> ...
> >>> a=A(d)
> >>> print a.a
> 0
> >>> b=B(d)
> >>> print b.b
> 0
> >>> d['A'] = 1
> >>> d['B'] = 2
> >>> print a.a
> 1
> >>> print b.b
> 2
> 
>     So that in this example, we are intercepting the accessing of the
> attributes in the classes 'A' and 'B' so they return the values from the
> dictionary 'd' instead of any attribute 'a' or 'b' they might have.
> 
>     A more complete solution that intercepts the setting of the attributes 'a'
> or 'b' is left as an exercise for the reader.
> 
>        Richard

I need a slightly different twist now.  Somthing like:

>>> d = {'A':0,'B':0}
>>> c = {'A': -> (Pointer to) d['A']}
>>> print c['A']
0
>>> d['A'] = 10
>>> print c['A']
10

-- 
Curtis Jensen
cjensen at be-research.ucsd.edu
http://www-bioeng.ucsd.edu/~cjensen/
FAX (425) 740-1451




More information about the Python-list mailing list