import weakref
class AttributeAccess(object):
def __init__(self, container, accessor='__getattr__'):
mydict = self.__dict__
# XXXXXXXXXXXX WARNING XXXXXXXXXXXXXX
# The back reference to the container should be weak
# because if not, that would create a circular reference,
# and NestedRecArray ultimately inherits from
# numarray._ndarray._ndarray extension that have a dealloc
# and this is equivalent to a __del__ method, so the
# garbage collector does not work well in these situations
# XXXXXXXXXXXX WARNING XXXXXXXXXXXXXX
#mydict['__container'] = container
mydict['__container'] = weakref.ref(container)
mydict['__accessor'] = accessor
def __getattr__(self, name):
# XXXXXXXXXXXX WARNING XXXXXXXXXXXXXX
# The back reference to the container should be weak
# because if not, that would create a circular reference,
# and NestedRecArray ultimately inherits from
# numarray._ndarray._ndarray extension that have a dealloc
# and this is equivalent to a __del__ method, so the
# garbage collector does not work well in these situations
# XXXXXXXXXXXX WARNING XXXXXXXXXXXXXX
#container = self.__dict__['__container']
container = self.__dict__['__container']()
accessor = self.__dict__['__accessor']
return getattr(container, accessor)(name)
## Local Variables:
## mode: python
## py-indent-offset: 4
## tab-width: 4
## fill-column: 72
## End:
|