Properties for modules?
James Stroud
jstroud at mbi.ucla.edu
Mon Jun 11 18:06:29 EDT 2007
Ed Leafe wrote:
> I have a simple module that reads in values from disk when
> imported, and stores them in attributes, allowing for code like:
>
> >>> import moduleFoo
> >>> print moduleFoo.someSetting
> 'the value'
>
> What I'd like to do is have a more property-like behavior, so that
> if they try to set the value of moduleFoo.someSetting, it also persists
> it to disk. But properties are really only useful in instances of
> classes; if I define 'someSetting' as a property at the module level, I
> get:
>
> >>> import moduleFoo
> >>> print moduleFoo.someSetting
> <property object at 0x78a990>
>
> Does anyone know any good tricks for getting property-like behavior
> here?
>
> -- Ed Leafe
> -- http://leafe.com
> -- http://dabodev.com
Most pythonic and recommended would be to create a class inside
moduleFoo that has the functionality you describe, instantiate an
instance, and then import reference to the instance into the local
namespace. This will be essentially equivalent to "module level
properties" as you describe them.
# moduleFoo.py
def get_setting(self, name):
return do_whatever(name)
def set_setting(self, name, arg):
return do_whatever_else(name, arg)
class Foo(object):
someSetting = property(set_setting, get_setting)
foo = Foo()
# program.py
from moduleFoo import foo
foo.someSetting = some_value
# etc.
Of course, its probably better to move the getters and setters into Foo
if they will only be used in foo context.
James
More information about the Python-list
mailing list