Is this pythonic?
Frank Millman
frank at chagford.com
Wed Nov 23 04:10:42 EST 2016
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
More information about the Python-list
mailing list