Newbie Alert: Help me store constants pythonically
Steven D'Aprano
steve at REMOVEMEcyber.com.au
Mon Nov 7 21:56:10 EST 2005
Brendan wrote:
> Thanks for your reply Steve. I like this suggestion because it
> separates my config data from the code, which could mean less headaches
> editing the values later. It also lets me keep my constants
> language-neutral, which is good because I haven't convinced my boss yet
> that Python's the way to go.
Cool :-)
> The only downside is that it doesn't do any 'name checking', so any
> mistakes in my config file won't show up until the middle of the
> analysis.
That's easy: in your ConfigParser subclass, create a
method:
def validate_name(self, name):
if not name in self.__class__.ALLOWED_NAME_LIST:
raise ValueError("Name '%s' not recognised." \
% name)
then call that method before adding the attribute to
the object __dict__. ALLOWED_NAME_LIST should be a
class attribute, or perhaps use a global instead.
> Maybe this is a 'static language' mode of thinking, but it
> seems risky. Also my config files have (a tiny bit of) nested
> structure, such as:
>
> Model1(
> numBumps = 1
> sizeOfBumps = 2
> transversePlanes = [
> Plane(type=3, z=4),
> Plane(type=5, z=6),
> Plane(type=3, z=8)
> ]
> )
That's a little trickier, but not much. You effectively
are just creating a struct where some attributes are
themselves structs.
> which I'm not sure the .ini format can easily support.
Perhaps not easily, but maybe you can modify the code
or subclass it.
Good luck!
--
Steven.
More information about the Python-list
mailing list