[Python-Dev] Summary of "dynamic attribute access" discussion

Ron Adam rrr at ronadam.com
Tue Feb 13 19:11:18 CET 2007


Georg Brandl wrote:
> Martin v. Löwis schrieb:
>> Anthony Baxter schrieb:
>>>> and the "wrapper class" idea of Nick Coghlan:
>>>>    attrview(obj)[foo]
>>> This also appeals - partly because it's not magic syntax <wink>
>> I also like this. I would like to spell it attrs, and
>> I think its specification is
>>
>> class attrs:
>>    def __init__(self, obj):
>>      self.obj = obj
>>    def __getitem__(self, name):
>>      return getattr(self.obj, name)
>>    def __setitem__(self, name, value):
>>      return setattr(self.obj, name, value)
>>    def __delitem__(self, name):
>>      return delattr(self, name)
>>    def __contains__(self, name):
>>      return hasattr(self, name)
>>
>> It's so easy people can include in their code for backwards
>> compatibility; in Python 2.6, it could be a highly-efficient
>> builtin (you still pay for the lookup of the name 'attrs',
>> of course).
> 
> I fear people will confuse vars() and attrs() then.
> 
> Georg

Would it be possible for attrview to be a property?


Something like...  (Probably needs more than this to handle all cases.)

     class obj(object):
         def _attrview(self):
             return self.__dict__
         attr = property(_attrview)


If it was this simple we just do obj.__dict__[foo] in the first place. Right? 
I'm overlooking something obvious I think, but the spelling is nice.

     obj[foo]             -> access content
     obj.foo              -> access attribute directly
     obj.attr[foo]        -> access attribute dynamically


Ron




More information about the Python-Dev mailing list