Hi all

Sometimes I write something that I think is quite clever, but later on I look at it and ask 'What was I thinking?'.

I have just come up with a 'clever' solution to a problem. Would this cause raised eyebrows if you were reviewing this?

I have a class that represents a single database column - there could be hundreds of instances at any time.

The class has a getval() method to return the current value.

Usually the value is stored in the instance, and can be returned immediately, but sometimes it has to be computed, incurring further database lookups.

In many cases the computed value is never actually requested, so I want to delay the computation until the first call to getval().

I could add an 'if computation_required: ' block to getval(), but I am trying to avoid that, partly because this would have to be checked for every call to getval() but would only used in a small number of cases, and partly because I have a few subclasses where getval() is over-ridden so I would have to add the extra code to every one (or call the superclass on every one).

This is what I have come up with.

1. Rename all instances of 'getval()' to '_getval()'.

2. Add a new method '_getval_with_comp()'.

3. When instantiating an object, check if it would need computation -
   if computation_required:
       self.getval = self._getval_with_comp
   else:
       self.getval = self._getval

4. In _getval_with_comp, perform the computation, then add the following -
       self.getval = self._getval
       return self._getval()

What is the verdict? -1, 0, or +1?

Frank Millman


--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to