[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