On Aug 13, 11:38 am, "Calvin Spealman" <[EMAIL PROTECTED]> wrote:
> On Wed, Aug 13, 2008 at 11:32 AM, Cousson, Benoit <[EMAIL PROTECTED]> wrote:
> >> Defining it as a nested class saves you one line
> >> of code, but IMHO makes the result just a bit more cluttered, while
> >> reducing the elegance of reusing the metaclass.
>
> > The whole point of nested class is to avoid polluting the namespace with 
> > classes that are only used locally. So the argument about the elegance of 
> > reusing is not very valid in that case.
>
> There is no point of nested classes because nested classes _are not_
> supported by python. They are simply an artifact of not actively
> denying the syntax non-globally. I would fully support a change to the
> language to actively forbid a class definition that is not
> module-level.


I think that's taking it a little too far.  It's not unreasonable to
throw small, private use classes into the class definition, like so:

class Someting(object):
    class PrivateException(Exception):
        pass


And inside function a class definition can make a lot of sense.
Oftentimes I write a quick adaptor class because I want to pass
something to code that expects something else, for instance:

def some_function(lines):
    class FileMimicker(object):
        def __init__(self):
            self.index = 0
        def readline(self):
            line = lines[self.index]
            self.index += 1
            return line
    function_that_calls_readline(FileMimicker())


(Why would I want to clutter up my module's namespace for that silly
thing?)

So I see no good reason for the compiler to disallow nested class
statements; it's occasionally useful and not a common pitfall.


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

Reply via email to