__getitem__
работает только в классе. Вы не можете переопределить это в экземпляре.
Это работает:
class A(dict):
def __getitem__(self, name):
return dict.__getitem__(self, name)
class B(object):
def __init__(self):
self.a = A()
def __getitem__(self, item):
return self.a[item]
b1 = B()
b1.a['a'] = 5
b2 = B()
b2.a['b'] = 10
c = b1['a']
d = b2['b']
Если вы хотите определить его в __init__
по какой-то странной причине, вы должны создать дескриптор:
def __init__(self):
self.a = A()
def mygetitem(self, item):
return self.a[item]
B.__getitem__ = types.MethodType(mygetitem, None, B)