__dict__ attribute for built-in types

Duncan Booth duncan.booth at invalid.invalid
Thu Oct 27 10:36:19 EDT 2011


Chris Angelico <rosuav at gmail.com> wrote:

> On Thu, Oct 27, 2011 at 10:03 PM, Duncan Booth
><duncan.booth at invalid.invalid> wrote:
>> Types without a __dict__ use less memory. Also, if you couldn't have a
>> type that didn't have a `__dict__` then any `dict` would also need its
>> own `__dict__` which would either result in infinite memory use or
>> recursive dictionaries.
>>
> 
> Easy, just self-reference.
> a = {}
> a.__dict__ is a  --> True
> 
> Yeah, it's recursion, but no different from types:
> 

Try thinking that one through. Imagine you could set up a dictionary the 
way you describe:

>>> class DictWithDict(dict):
	def __init__(self, *args, **kw):
		dict.__init__(self, *args, **kw)
		self.__dict__ = self

		
>>> d = DictWithDict()
>>> d.keys()
dict_keys([])
>>> d = DictWithDict({'a': 42})
>>> d.keys()
dict_keys(['a'])
>>> d['keys'] = lambda: 'oops'
>>> d.keys()
'oops'
>>> 

A dict with itself as its own __dict__ becomes like a javascript object 
where subscripting and attribute access are mostly interchangeable.


-- 
Duncan Booth http://kupuguy.blogspot.com



More information about the Python-list mailing list