#!/usr/bin/python
# Hi, # # I noticed something interesting when trying to define # the __getitem__() method in a class that inherits from # (dict). If within the __getitem__ method I attempt # to get an item from self, the __getitem__ method is # called in an infinite recursion. I am very fond of # inheriting from (dict) as in the class 'bar' below, # but this problem is making me think that I will have # to write them as in 'foo' below. Is there a workaround # to make the class 'bar' work as I planned?
class foo:
data = {}
def __getitem__(self, what): if not self.data.has_key(what): self.data[what] = None return None else: return self.data[what]
class bar(dict):
data = {}
def __getitem__(self, what): if not self.has_key(what): self[what] = None return None else: return self[what]
f = foo() b = bar()
print f['somekey'] print f['somekey']
print b['somekey'] print b['somekey']
# OUTPUT: # None # None # None # Traceback (most recent call last): # File "<stdin>", line 47, in ? # File "<stdin>", line 36, in __getitem__ # File "<stdin>", line 36, in __getitem__ # File "<stdin>", line 36, in __getitem__
Thanks,
Tobiah -- http://mail.python.org/mailman/listinfo/python-list