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