On 2010-04-02 19:42:29 -0700, Ethan Furman said:
Terry Reedy wrote:
In<xns9d4ec021dc8eaduncanbo...@127.0.0.1> Duncan
Booth<duncan.bo...@invalid.invalid> writes:
class Spam(object):
mongo = None
def __call__(self, x, y, z):
if self.mongo is None:
self.mongo = heavy_lifting_at_runtime()
return frobnicate(x, y, z, self.mongo)
Unless one wants the intialization of mongo delayed in case spam is
never called, it can go in __init__ instead.
As a matter of fact, I have an object that is usually not called during
it's modules use, so I put in __getattr__. Sped the modules load time
back up to pert near instantaneous. :)
~Ethan~
I prefer:
class Spam(object):
def __init__(self):
self._mondo = None
def _get_mondo(self):
if self._mondo is None:
self._mondo = heavy_lifting_at_runtime()
return self._mondo
mondo = property(_get_mondo)
def __call__(self, x, y, z):
return frobnicate(x,y,z, self.mondo)
I don't know if properties are really faster or slower then a
__getattr__, but I find them a lot cleaner if I want to delay some
calculation until needed like that.
--
--S
... p.s: change the ".invalid" to ".com" in email address to reply privately.
--
http://mail.python.org/mailman/listinfo/python-list