[Python-3000] Change to class construction?

Ron Adam rrr at ronadam.com
Tue Jul 10 06:03:04 CEST 2007



Phillip J. Eby wrote:
> At 07:40 PM 7/9/2007 -0500, Ron Adam wrote:
> 
>> Guido van Rossum wrote:
>>
>>> We could easily change this to return a
>>> writable mapping that's not a dict at all but a "view" on the locals
>>> just as dict.keys() returns a view on a dict. I don't see why locals()
>>> couldn't return the object used to represent the namespace, but I
>>> don't see that it couldn't be some view on that object either,
>>> depending on the details of the implementation.
>>
>> This sounds great! I just recently wanted to pass a namespace to exec, 
>> but it refuses to accept anything but a dictionary for a local name 
>> space.
> 
> You can already do that in Python 2.4.
> 
> 
>> What I really want to do is pass an object as the local namespace.  
>> And have the exec() use it complete with it's properties intact.  
>> Passing obj.__dict__ doesn't work in this case.
> 
> You need a wrapper, e.g.:
> 
>      class AttrMap(object):
>          def __init__(self, ob):
>              self.ob = ob
>          def __getitem__(self, key):
>              try: return getattr(self.ob, key)
>              except AttributeError: raise KeyError, key
>          # setitem, delitem, etc...

Thanks, that should solves (I hope) the particular case I have.  Although 
it would have been nicer if it was in the library someplace.  Of course 
everyone says that about nearly everything.

It might be nice if locals() could receive an argument so it can be used 
with class's.  Possible returning a wrapped class view such as the example 
you gave.

Regards,
    Ron



More information about the Python-3000 mailing list