On Wed, 30 Dec 2015 17:31:11 -0700, Ian Kelly wrote: >> In any case, I thought that class attributes were, in fact, items of >> __dict__? > > That's correct, but as I said in my previous message, self.attrs and > self.attrs.__dict__ are two different dicts, and you're confusing one > for the other. Maybe this will be illuminating: > >>>> class mydict(dict): pass > ... >>>> md = mydict() >>>> md['foo'] = 42 # Set an item in md >>>> md['foo'] # 'foo' exists as an item > 42 >>>> md.foo # but not as an attribute > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > AttributeError: 'mydict' object has no attribute 'foo' >>>> md.__dict__['foo'] # and it's not in md.__dict__ > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > KeyError: 'foo' >>>> md.bar = 43 # Set an attribute on md md.bar # 'bar' exists as an >>>> attribute > 43 >>>> md.__dict__['bar'] # and it's in md.__dict__ > 43 >>>> md['bar'] # but it's not in md itself > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > KeyError: 'bar' > > And to hopefully drive the point home: > >>>> md.items() > [('foo', 42)] >>>> md.__dict__.items() > [('bar', 43)]
Okay, I think I got an important point that you said earlier but I didn't get the full ramifications thereof: class md (... more about this ...): pass md is a class that has an dictionary attribute __dict__: - md['level1'] puts attributes in md - md.level2 puts attributes in md.__dict__ is that correct? Now, as to the superclass, if that's, say, object, then it has two levels: md -> object (containing a dict) if the superclass is dict, then it only has one level: md -> dict I'll have to look at my methods again with those understandings. -- https://mail.python.org/mailman/listinfo/python-list