How to get outer class name from an inner class?

John Gordon gordon at panix.com
Tue May 8 16:05:20 EDT 2012


I'm trying to come up with a scheme for organizing exceptions in
my application.

Currently, I'm using a base class which knows how to look up the text
of a specific error in a database table, keyed on the error class name.

The base class looks like this:

class ApplicationException(Exception):
    """Base class for application-specific errors."""

    def get_message(self):
        """Return the error message associated with this class name."""

        class_name = self.__class__.__name__
        return UserMessage.objects.get(key=class_name).text

And then I define a bunch of subclasses which all have different names:

class QuestionTooShortError(NetIDAppsError):
    """User entered a security question which is too short."""
    pass

class QuestionTooLongError(NetIDAppsError):
    """User entered a security question which is too long."""
    pass

This scheme works, but I'd like to make it more streamlined.  Specifically,
I'd like to group the classes underneath a parent class, like so:

class Question(ApplicationException):

    class TooShort(ApplicationException):
        pass

    class TooLong(ApplicationException):
        pass

This will make it easier in the future for organizing lots of sub-errors.

My problem is this: the get_message() method in the base class only knows
the current class name, i.e. "TooShort" or "TooLong".  But that's not
enough; I also need to know the outer class name, i.e. "Question.TooShort"
or "Question.TooLong".  How do I get the outer class name?

Thanks,

-- 
John Gordon                   A is for Amy, who fell down the stairs
gordon at panix.com              B is for Basil, assaulted by bears
                                -- Edward Gorey, "The Gashlycrumb Tinies"




More information about the Python-list mailing list