Hey everyone,
I have a huge number of data items coming from a database. So far
there're no restrictions about how to model the items. They can be
dicts, objects of a custom class (preferable with __slots__) or namedTuple.
Those items have references to each other using ids. Fresh from the
database the items look like this (using dicts as examples):
item_1 = {"id": 1, "name": "root", "children_ids": [2, 3]}
item_2 = {"id": 2, "name": "child_1", "children_ids": [4]}
item_3 = {"id": 3, "name": "child_2", "children_ids": [6, 7, 8]}
Now I'd like to resolve the references on demand. For that purpose I
think about adding another entry in my dicts ("children_obj_refs"):
item_1 = {"id" = 1, "nam"e = "root", "children_ids" = [2, 3],
"children_obj_refs" = [item_2, item_3]}
To achieve that substitution dynamically on demand I could use a function:
def get_children(item):
try:
return item["children_obj_refs"]
except AttributeError:
# pseudocode for retrieving items from db based on ids
fresh_items_from_db = get_items_from_db(item["children_ids"])
# Now create new dict entry for future usage
item["children_obj_refs"] = fresh_items_from_db
However, I dislike to have to call a function all the time. I'd rather
get this done under the hood when accessing the dict with
item["children_obj_refs"]. So I've looked into subclassing a dict and
overwriting the __getitem__() method like this:
class TestSubDict(dict):
def __getitem__(self, key):
try:
return self[key]
except KeyError:
# load item from db and so on ...
But I run into recursion limit problems.
Any recommendations about that? (I'm not restricted to dicts, custom
classes are OK to, but with __slots__ to limit memory consumption.)
Many thanks in advance and cheers,
Jan
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor