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

AltStyle によって変換されたページ (->オリジナル) /