> Is there a way to get any sort of introspection which would return the
content of an instance *in the order they were declared or executed*
as opposed to alphabetical order?
Example:
class a: ... def __init__(self):
... self.value = 12
... self.avalue = 78 class b(a): ... def __init__(self):
... a.__init__(self )
... self.bvalue = 5
... def f(self):
... self.z = 3
... c=b()
c.__dict__
{'bvalue': 5, 'avalue': 78, 'value': 12}
Wrong answer, I am looking for something that would give me
{'value':12, 'avalue':78, 'bvalue':5'}
I tried the inspect.getmemb ers(c) without success.
Anyone has some advice how I can get the members listed in declaration
or execution order?
Rim,
You'd have to either overload the class's __getattribute_ _, __setattr__
and __delattr__ methods, or replace the builtin instance.__dict __
attribute with a new dictionary-like object that will produce the
ordering you want.
As an option, I've written an LRU that does such kinds of updates
quickly, though it also updates on read. Reading the comment at the
bottom will allow you to translate the update on read, to only updating
on write. The recipe is available here:
http://aspn.activestate.com/ASPN/Coo.../Recipe/252524
Doing a quick check, it doesn't look like you can say:
self.__dict__ = NON_DICT_OBJECT
Making LRU a subclass of dict seems to work on the surface, but it looks
to break a few things. Perhaps I should rewrite LRU to be more Pythonic.
Until then, you'll have to update __getattribute_ _, __setattr__ and
__delattr__.
- Josiah