pre-PEP: Simple Thunks

Ron_Adam radam2_ at _tampabay.rr.com
Mon Apr 18 11:48:25 EDT 2005


On Sun, 17 Apr 2005 19:56:10 -0700, Brian Sabbey
<sabbey at u.washington.edu> wrote:

>I also wouldn't do it that way.  I don't see a class as being much better, 
>though.  If I understand you correctly, with classes you would have 
>something like:
>
>p = Pickled('pickled.txt')
>p.load()
>p.data.append('more data')
>p.data.append('even more data')
>p.dump()

The load and dump would be private to the data class object. Here's a
more complete example.  

import pickle
class PickledData(object):
	def __init__(self, filename):
		self.filename = filename
		self.L = None
		try:
			self._load()
		except IOError:
			self.L = []
	def _load(self):
		f = open(self.filename, 'r')
		self.L = pickle.load(f)	
		f.close()
	def _update(self):
		f = open(self.filename, 'w')
		pickle.dump(self.L, f)
		f.close()			
	def append(self, record):
		self.L.append(record)
		self._update()
	# add other methods as needed ie.. get, sort, clear, etc...

pdata = PickledData('filename')

pdata.append('more data')
pdata.append('even more data')

print pdata.L
['more data', 'even more data']


>This has the same issues as with opening and closing files:  losing the 
>'dump', having to always use try/finally if needed, accidentally 
>re-binding 'p', significantly more lines.  Moreover, class 'Pickled' won't 
>be as readable as the 'pickled_file' function above since 'load' and 
>'dump' are separate methods that share data through 'self'.

A few more lines to create the class, but it encapsulates the data
object better. It is also reusable and extendable.

Cheers,
Ron

>The motivation for thunks is similar to the motivation for generators-- 
>yes, a class could be used instead, but in many cases it's more work than 
>should be necessary.
>
>-Brian





More information about the Python-list mailing list