[Python-Dev] Re: Use for enumerate (original) (raw)

Barry A. Warsaw barry@zope.com
Sat, 27 Apr 2002 14:49:23 -0400


"IK" == Ian Kjos <ikjos@email.uophx.edu> writes:

IK> PS: This is a good argument for pre-object-death destructors
IK> a'la C++. I think resources should be finalized as soon as
IK> they are no longer accessable through other means. I realize
IK> that there are issues to be resolved; perl does it by
IK> following the law of most (!) astonishment. /me dives into
IK> some documentation.

Here's a 5 minute toy example...

-Barry

-------------------- snip snip --------------------/tmp/play.py class resource: def init(self, resource, func): self.__resource = resource self.__func = func

def __call__(self, *args, **kws):
    self.__resource.acquire()
    try:
        rtn = self.__func(*args, **kws)
    finally:
        self.__resource.release()
    return rtn

class FileResource: def init(self, filename): self._filename = filename self._fp = None self.firstbyte = resource(self, self.firstbyte)

def acquire(self):
    assert self._fp is None
    self._fp = file(self._filename)

def release(self):
    assert self._fp is not None
    self._fp.close()
    self._fp = None

def firstbyte(self):
    self._fp.seek(0)
    return self._fp.read(1)

fr = FileResource('/tmp/play.py') print 'firstbyte:', fr.firstbyte() assert fr._fp is None