From: kj on 26 Mar 2010 10:49 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 [*] My own subjective dislike for the widespread practice of using triple quotes to comment out code is formally similar to this one ("the 'intended use' for triple-quoting is not to comment out code", etc.). Here I find myself on the opposite side of the purist/pragmatic divide. Hmmm.
From: Harishankar on 26 Mar 2010 11:04 On Fri, 26 Mar 2010 14:49:02 +0000, kj wrote: > 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 > > [*] My own subjective dislike for the widespread practice of using > triple quotes to comment out code is formally similar to this one ("the > 'intended use' for triple-quoting is not to comment out code", etc.). > Here I find myself on the opposite side of the purist/pragmatic divide. > Hmmm. I myself am a humble beginner in many ways, but generally isn't that (namespacing) achieved by using modules? I don't find the need generally to assign namespace to local variables and when there is a need for it, module level objects do the job.
From: Philip Semanchuk on 26 Mar 2010 11:08 On Mar 26, 2010, at 10:49 AM, kj wrote: > > > 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? I hope it's not problematic; I use it all the time. A few differences about the way I do it: - I respect PEP 8 for the class name (CamelCaps) - If the attributes are supposed to be constants, I capitalize the attributes - I often add NONE with a value of zero so that bool(MyClass.NONE) will evaluate to False and everything else will be True Here's an example from my code: class Apodization(object): """ Apodization constants """ # These constants are arbitrary and may change. # However bool(NONE) is guaranteed to be False NONE = 0 GAUSSIAN = 1 LORENTZIAN = 2 Cheers Philip
From: Jon Clements on 26 Mar 2010 11:47 On 26 Mar, 14:49, kj <no.em...(a)please.post> wrote: > 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 > > [*] My own subjective dislike for the widespread practice of using > triple quotes to comment out code is formally similar to this one > ("the 'intended use' for triple-quoting is not to comment out code", > etc.). Here I find myself on the opposite side of the purist/pragmatic > divide. Hmmm. Given this example, I would go for the module and CONSTANT_NAMING approach. But yes, even in the docs. you can use a class as a C type-of struct. I stick to the convention of a class knows what it's doing, what it's doing it on, and a module just happens to contain those classes. C++ std::algorithm for instance, makes sense it's called std, ditto algorithm and has shed loads in it, but would I create a class called algorithm (unlikely). I would tend to view modules as "namespace". Rightly or wrongly, just lets you make the right design choice. Jon.
From: Jack Diederich on 26 Mar 2010 11:49 On Fri, Mar 26, 2010 at 10:49 AM, kj <no.email(a)please.post> wrote: > > > 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) Classes as namespaces are a valid use case (I do it all the time). Python 3 has a small cleanup that makes classes even closer to module namespaces; namely the concept of "unbound methods" goes away. In 3.x when you get a function from a class you get the function itself and not an unbound function. -Jack
|
Next
|
Last
Pages: 1 2 3 4 5 6 Prev: Have you embraced Python 3.x yet? Next: python logging writes an empty file |