markolopa wrote:
Hi again,
I put a copy of the message and the tarball of the code here (because
of the problem of line breaks):
http://python-advocacy.wikidot.com/comp-lang-python-question
Here's a slightly different approach:
repository.py
=============
class Repository(object):
def __init__(self):
self._providers = {}
self._values = {}
def add_provider(self, func, keys):
for k in keys:
self._providers[k] = func
def __getitem__(self, key):
if key not in self._values:
self._providers[key](self)
return self._values[key]
def __setitem__(self, key, value):
self._values[key] = value
def register(*modules):
"Register the provider modules and return a repository."
repo = Repository()
for mod in modules:
# Scan the module for providers.
# A provider is a function which lists what it provides in its __doc__
string.
for name, value in mod.__dict__.items():
if callable(value) and value.__doc__:
repo.add_provider(value, value.__doc__.split())
return repo
routines.py
===========
# The providers are functions which list what they provide in their __doc__
strings.
def ReadData(repo):
'birth_year gender'
repo['birth_year'] = 1979
repo['gender'] = 'F'
def YearToAge(repo):
'age'
repo['age'] = 2009 - repo['birth_year']
def ComputeMHF(repo):
'max_heart_frequency'
gender = repo['gender']
age = repo['age']
mhf = 211 - age if gender == 'F' else 205 - age
repo['max_heart_frequency'] = mhf
test.py
=======
import unittest
import repository
import routines
class Test(unittest.TestCase):
def test_age(self):
repo = repository.register(routines)
self.assertEqual(repo['age'], 30)
def test_max_heart_frequency(self):
repo = repository.register(routines)
self.assertEqual(repo['max_heart_frequency'], 181)
unittest.main()
--
http://mail.python.org/mailman/listinfo/python-list