On Sun, Mar 25, 2018 at 5:14 AM, D'Arcy Cain <da...@vybenetworks.com> wrote: > I'm not even sure how to describe what I am trying to do which perhaps > indicates that what I am trying to do is the wrong solution to my > problem in the first place but let me give it a shot. Look at the > following code. > > class C1(dict): > class C2(object): > def f(self): > return X['field'] > > O1 = C1() > O1['field'] = 1 > O2 = O1.C2() > print(O2.f()) > > I am trying to figure out what "X" should be. I know how to access the > parent class but in this case I am trying to access the parent object. > I tried various forms of super() but that didn't seem to work. >
What you'd need here is for O1.C2 to be an instance method, instead of simply a nested class. That way, it can retain a reference to O1. Something like: class C1(dict): class _C2(object): def __init__(self, parent): self.parent = parent def f(self): return self.parent["field"] def C2(self): return self._C2(self) It may also be possible to do this through __new__, but I haven't confirmed it. Might need some careful shenanigans if you want to have O1.C2 actually be the class. ChrisA -- https://mail.python.org/mailman/listinfo/python-list