Chris Rebert wrote:
On Wed, Dec 2, 2009 at 8:55 PM, cmckenzie <mckenzi...@gmail.com> wrote:
Hi.
I'm new to Python, but I've managed to make some nice progress up to
this point. After some code refactoring, I ran into a class design
problem and I was wondering what the experts thought. It goes
something like this:
class module:
nestedClass
def __init__():
self.nestedClass = nested()
print self.nestedClass.nestedVar
class nested():
nestedVar = 1
def __init__(self):
print "Initialized..."
I can't figure out what the correct way to construct the "nested"
class so it can belong to "module".
I want a class level construct of "nested" to belong to "module", but
I keep getting nestedClass isn't defined.
Here's the scoping reason why it fails (remember that the nested class
is a class variable of the containing class):
[snip interesting reminder/faq]
However, there's pretty much no reason to nest classes anyway in
Python (it's not Java!).
A little bit off topic,ahere is a nested class pattern I'm using quite
often :
class Device
"""Holds the different device services."""
class OS: # UPPERCASE means it holds constants
"""Operating system of one device."""
VXWORKS = 'vxWorks'
ECOS = 'ecos'
def init(self, _os = None):
self.os = _os
device = Device(Device.OS.VXWORKS)
Whenever I get a Device instance in my code I can match its OS without
tedious imports:
# no "from whatever import Device" is required
if device.os is device.OS.VXWORKS:
print 'you are using vxWorks'
I'm using this pattern whenever I can now:
1/ it removes all magically 'inside code' defined strings or numbers,
only class attributes are used.
2/ if required, it allows to write complete and detailed documentation
for nested class constants
3/ you can match attributes with the nested class values without further
import, everything is accessible from the instance itself
JM
--
http://mail.python.org/mailman/listinfo/python-list