C-style static variables in Python?
Stephen Hansen
apt.shansen at gmail.invalid
Fri Apr 2 23:11:21 EDT 2010
On 2010-04-02 19:42:29 -0700, Ethan Furman said:
> Terry Reedy wrote:
>>> In<Xns9D4EC021DC8EAduncanbooth at 127.0.0.1> Duncan
>>> Booth<duncan.booth at 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.
More information about the Python-list
mailing list