In Corpus.Message, __getattr__ is defined as def __getattr__(self, attributeName): '''On-demand loading of the message text.''' if attributeName in ('hdrtxt', 'payload'): self.load() return getattr(self, attributeName) This has to be an infloop, right? Skip