On 9/12/07, Charles Fox <[EMAIL PROTECTED]> wrote:
> Thanks guys -- yeah these two stategies (short s.varname; and explicit
> rescoping, a=self.a etc) are more or less what I was using.  That's
> still kind of annoying though.
>
> The s.varname approach still makes numerical code much harder to read.
>
> I had a nasty bug with the boilerplate approach when forgetting to
> reassign some of the variables back to members (self.a=a).  And that's
> a lot of boilerplate you need -- I thought the python way was to
> minimize redundant code?  (Ditching header files and curley brackets
> was a main reason for me coming here).
>
> I see the argument for making self explicit -- what would be wrong
> with just .a instead of self.a though?  That's still explicit but much
> easier to read.  (I think I've seen that somewhere else, is it C#?)
>
> --
> http://mail.python.org/mailman/listinfo/python-list
>


This is terrible and horrible, please don't use it. That said,
presenting the magic implicit_self context manager!

from __future__ import with_statement
import sys

class implicit_self(object):
    def __init__(self, obj):
        self.obj = obj
    def __enter__(self):
        local = sys._getframe(1).f_locals
        local.update(self.obj.__dict__)
    def __exit__(self, exc, obj, tb):
        local = sys._getframe(1).f_locals
        for k in self.obj.__dict__:
            setattr(self.obj, k, local[k])

if __name__ == '__main__':
    class Test(object):
        pass
    t = Test()
    t.a = 10
    t.b = 20
    with implicit_self(t):
        print a
        print b
        a = 40
        b = a * 2

    print t.a
    print t.b
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to