is this foolish?

Andrea Crotti andrea.crotti.0 at gmail.com
Thu Apr 12 10:01:40 EDT 2012


On 04/12/2012 10:35 AM, Cameron Simpson wrote:
> I've found myself using a Python gotcha as a feature.
>
> I've got a budding mail filter program which keeps rule state in a
> little class instance. Slightly paraphrased:
>
>      class RuleState(object):
>          def __init__(self, M, maildb_path, maildirs={}):
>              [...]
>              self.maildirs = maildirs
>
> The maildirs property is a cache of Maildir objects mapped by their
> pathname to avoid opening Maildirs every time they're mentioned. I
> create a new RuleState every time I file a message, and of course I want
> to share the cache between instances.
>
> Normally we look on the Python default parameter value as a gotcha which
> causes the unwary to reuse a single object across the board, causing
> unwanted persistence of state.
>
> But here I actually think this is a sane way to make an anonymous single
> shared state object for the maildirs cache, absent the caller's intent
> to use their own.
>
> I can think of a few potential downsides, but on the whole this is going
> to do exactly what I want in this case.
>
> Would experienced users please mock me?

You could probably just make this caching more explicit using a decorator.
The good thing about that is that you could even change the behaviour of 
your
caching without touching the code that uses it for example.



More information about the Python-list mailing list