On 06 Dec, 2005, at 20:53, Steven Bethard wrote: > Samuel M. Smith wrote: >> The dict class has some read only attributes that generate an >> exception >> if I try to assign a value to them. >> I wanted to trap for this exception in a subclass using super but it >> doesn't happen. >> >> class SD(dict): >> pass >> > [snip] >> s = SD() >> super(SD,s).__setattr__('__iter__', True) >> >> Expecting to get the ReadOnly exception but I don't get the >> exception. > > Note that __iter__ is on the dict *type* not dict instances. Try > this: > > py> class SD(dict): > ... pass > ... > py> super(SD, SD).__init__ = False > Traceback (most recent call last): > File "<interactive input>", line 1, in ? > AttributeError: 'super' object attribute '__init__' is read-only > > You can always shadow class-level attributes in the instance dict. > (That's what you were doing.) If you want to (try to) replace an > attribute in the class dict, you need to use the class object, not an > instance object. >
I guess that's where my understanding breaks down. I thought the only way to access class attributes was by calling the class directly as your example indicates but __iter__ is a class attribute that I can access from the instance at least to read it. So what determines which class attributes get copied to the instance and which ones don't? -- http://mail.python.org/mailman/listinfo/python-list