On Mar 27, 2010, at 8:04 AM, J. Clifford Dyer wrote:

On Fri, Mar 26, 2010 at 02:49:02PM +0000, kj wrote regarding Classes as namespaces?:

What's the word on using "classes as namespaces"?  E.g.

class _cfg(object):
   spam = 1
   jambon = 3
   huevos = 2

breakfast = (_cfg.spam, _cfg.jambon, _cfg.huevos)


Granted, this is not the "intended use" for classes, and therefore
could be viewed as a misuse ("that's what dictionaries are for",
etc.).  But other than this somewhat academic objection[*], I really
can see no problem with using classes in this way.

And yet, I've come across online murky warnings against using
classes as "pseudo-namespaces".  Is there some problem that I'm
not seeing with this technique?

~K

I don't see anything wrong with this, except that I would clean it up in a couple ways. Like other posters, I would give the class a proper class name (Cfg).

I also would not assign integers to spam, jambon, or huevos. Instead I would assign each a bare object(). That way you won't get unexpected interactions with other constants outside the class. An object() is equal only to itself.

What I like about this method is that it will break the bad habit I see in junior programmers of making assumptions about the value of the constant. For instance, if they see that Cfg.JAMBON = 3 and hardcode 3 in their code somewhere, that will work fine until someone re-orders the constants. Using object() instead forces them to use Cfg.JAMBON since the value will (probably) change with every run of the program.

It will also discourage bugs-waiting-to-happen like this:
if breakfast > Cfg.SPAM:
    print "Good news, breakfast is jambon or huevos"



bye
P


--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to