Hmm, I know this is something fundamental about how Python implements
predicate dispatch, but for some reason I believed that this would
work:
class delegate_dict(d ict):
def __init__(self, orig, deleg):
dict.__init__(s elf, orig)
self.deleg = deleg
def __getitem__(sel f, name):
print 'here:', name
try:
v = dict.__getitem_ _(self, name)
except KeyError:
return self.deleg.__ge titem__(name)
return v
def delegate(target , source):
target.__dict__ = delegate_dict(t arget.__dict__, source.__dict__ )
As a simple usage, give:
class A(object):
pass
class B(object):
def __init__(self, o):
delegate(self, o)
a = A()
a.test = 1
b = B(a)
print b.__dict__.__ge titem__('test')
# This goes down in flames
print b.test
And then a dumb example showing the concept I assumed was a given:
class C(object):
pass
c = C()
c.x = 1
assert c.__dict__.__ge titem__('x') == c.x
Could someone please tell me why the first example using a customized
dict does not perform as advertised?