You are not using positional arguments in your example. So the relevant code is:
class attrdict(dict):
def __init__(self, **kwargs):
dict.__init__(self, **kwargs)
self.__dict__ = self
in first line you define class attrdict as a subclass of dict.
in the second line you define the function that automatically will initialize your instance. You pass keyword arguments (**kargs) to this function. When you instantiate a:
a = attrdict(x=1, y=2)
you are actually calling
attrdict.__init__(a, {'x':1, 'y':2})
dict instance core initialitation is done by initializing the dict builtin superclass. This is done in the third line passing the parameters received in attrdict.init.
Thus,
dict.__init__(self,{'x':1, 'y:2'})
makes self (the instance a) a dictionary:
self == {'x':1, 'y:2'}
The nice thing occurs in the last line:
each instance has a dictionary holding its attributes. This is self.dict (i.e. a.dict).
for example if
a.__dict__ = {'x':1, 'y:2'}
we could write a.x or a.y and get values 1 or 2 respectively.
So, this is what line 4 does:
self.__dict__ = self
is equivalent to:
a.__dict__ = a where a = {'x':1, 'y:2'}
Then I can call a.x and a.y
hope is not too messy