[IronPython] Evaluating python from within the context of a class

Michael Foord fuzzyman at voidspace.org.uk
Fri Jun 27 10:26:28 PDT 2008


Jonathan Slenders wrote:
> The following works. But I've no idea how to pass params to the member 
> function. (Anyone: How can you call a function with parameters 
> unpacked from a tuple??)

    def g(*p, *args, **kwargs):
      f(self, *args, **kwargs)

Michael
>
> But why do you actually want to do this? If the class instance is not 
> important, just make a static method of this one.
>
> class RT(object):
>         def Evaluate(self, code):
>                 def generateContext():
>                         def dropself(f):
>                                 def g(*p):
>                                         f(self)
>                                 return g
>                         context = {}
>                         for f in RT.__dict__:
>                                 context[f] = dropself(RT.__dict__[f])
>                         return context
>
>                 eval(code, generateContext())
>
>         def test(self):
>                 print 'RT test'
>
> RT().Evaluate('test()')
>
>
>
>
>
>
> 2008/6/27 Michael Stephens <falcon at uwyo.edu <mailto:falcon at uwyo.edu>>:
>
>     Is there anyway cool way you know of to generate the context at
>     runtime
>     def Evaluate(_self_,code)
>      exec code in GenerateContext(a)
>
>
>
>     Michael Stephens
>
>     Electrical Engineering Graduate Student
>     University of Wyoming
>     falcon at uwyo.edu <mailto:falcon at uwyo.edu> or 89iroc at gmail.com
>     <mailto:89iroc at gmail.com>
>
>     On Fri, Jun 27, 2008 at 11:02 AM, Michael Foord
>     <fuzzyman at voidspace.org.uk <mailto:fuzzyman at voidspace.org.uk>> wrote:
>
>         Michael Stephens wrote:
>
>             I guess I can rebind locals and functions into my own
>             dictionary.. I was just hoping to avoid that with some
>             snazzy python.
>
>         I think exec'ing in a custom context is *more* snazzy Python. :-p
>
>         Michael
>
>             Michael Stephens
>
>             Electrical Engineering Graduate Student
>             University of Wyoming
>             falcon at uwyo.edu <mailto:falcon at uwyo.edu>
>             <mailto:falcon at uwyo.edu <mailto:falcon at uwyo.edu>> or
>             89iroc at gmail.com <mailto:89iroc at gmail.com>
>             <mailto:89iroc at gmail.com <mailto:89iroc at gmail.com>>
>
>             On Fri, Jun 27, 2008 at 10:58 AM, Michael Foord
>             <fuzzyman at voidspace.org.uk
>             <mailto:fuzzyman at voidspace.org.uk>
>             <mailto:fuzzyman at voidspace.org.uk
>             <mailto:fuzzyman at voidspace.org.uk>>> wrote:
>
>                Michael Stephens wrote:
>
>                    Closer.. but self.__dict__ is empty and cannot find
>             test.  We
>                    are trying to wire up property expressions in our
>             system.   So
>                    control.Enable="GetEnabled()" rather than what we
>             have now
>                    which is control.Enable="currentform.GetEnabled()"
>
>                    I thought I could eval the RHS inside the class to
>             get what i
>                    wanted but alas no dice.
>
>
>                Well, you could do it in RT.__dict__ - but you would
>             have to make
>                test a staticmethod.
>
>                Why not maintain an explicit dictionary as a context?
>
>                Michael
>
>                    Michael Stephens
>
>                    Electrical Engineering Graduate Student
>                    University of Wyoming
>                    falcon at uwyo.edu <mailto:falcon at uwyo.edu>
>             <mailto:falcon at uwyo.edu <mailto:falcon at uwyo.edu>>
>                    <mailto:falcon at uwyo.edu <mailto:falcon at uwyo.edu>
>             <mailto:falcon at uwyo.edu <mailto:falcon at uwyo.edu>>> or
>                    89iroc at gmail.com <mailto:89iroc at gmail.com>
>             <mailto:89iroc at gmail.com <mailto:89iroc at gmail.com>>
>                    <mailto:89iroc at gmail.com <mailto:89iroc at gmail.com>
>             <mailto:89iroc at gmail.com <mailto:89iroc at gmail.com>>>
>
>                    On Fri, Jun 27, 2008 at 10:46 AM, Michael Foord
>                    <fuzzyman at voidspace.org.uk
>             <mailto:fuzzyman at voidspace.org.uk>
>             <mailto:fuzzyman at voidspace.org.uk
>             <mailto:fuzzyman at voidspace.org.uk>>
>                    <mailto:fuzzyman at voidspace.org.uk
>             <mailto:fuzzyman at voidspace.org.uk>
>                    <mailto:fuzzyman at voidspace.org.uk
>             <mailto:fuzzyman at voidspace.org.uk>>>> wrote:
>
>                       Michael Stephens wrote:
>
>                           I want to be able to execute arbitrary
>             expressions but have
>                           their context be within my class.  The end
>             result is
>                    that RT
>                           test should be printed and not global test
>
>                           def test():
>                            print "global test"
>
>                           class RT:
>                            def test(_self_):
>                            print 'RT test'
>                            def Evaluate(_self_,code):
>                            eval(code)
>
>
>                       exec code in self.__dict__
>
>                       Might work.
>
>                       Michael
>
>
>                           test()
>                           a.test()
>                           a=RT()
>                           a.Evaluate('test()')
>
>                           Michael Stephens
>
>                           Electrical Engineering Graduate Student
>                           University of Wyoming
>                           falcon at uwyo.edu <mailto:falcon at uwyo.edu>
>             <mailto:falcon at uwyo.edu <mailto:falcon at uwyo.edu>>
>                    <mailto:falcon at uwyo.edu <mailto:falcon at uwyo.edu>
>             <mailto:falcon at uwyo.edu <mailto:falcon at uwyo.edu>>>
>                           <mailto:falcon at uwyo.edu
>             <mailto:falcon at uwyo.edu> <mailto:falcon at uwyo.edu
>             <mailto:falcon at uwyo.edu>>
>                    <mailto:falcon at uwyo.edu <mailto:falcon at uwyo.edu>
>             <mailto:falcon at uwyo.edu <mailto:falcon at uwyo.edu>>>> or
>
>                           89iroc at gmail.com <mailto:89iroc at gmail.com>
>             <mailto:89iroc at gmail.com <mailto:89iroc at gmail.com>>
>                    <mailto:89iroc at gmail.com <mailto:89iroc at gmail.com>
>             <mailto:89iroc at gmail.com <mailto:89iroc at gmail.com>>>
>                           <mailto:89iroc at gmail.com
>             <mailto:89iroc at gmail.com> <mailto:89iroc at gmail.com
>             <mailto:89iroc at gmail.com>>
>                    <mailto:89iroc at gmail.com <mailto:89iroc at gmail.com>
>             <mailto:89iroc at gmail.com <mailto:89iroc at gmail.com>>>>
>                                
>             ------------------------------------------------------------------------
>
>                           _______________________________________________
>                           Users mailing list
>                           Users at lists.ironpython.com
>             <mailto:Users at lists.ironpython.com>
>                    <mailto:Users at lists.ironpython.com
>             <mailto:Users at lists.ironpython.com>>
>                    <mailto:Users at lists.ironpython.com
>             <mailto:Users at lists.ironpython.com>
>                    <mailto:Users at lists.ironpython.com
>             <mailto:Users at lists.ironpython.com>>>
>
>                                
>             http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>                          
>
>                       --    http://www.ironpythoninaction.com/
>                       http://www.voidspace.org.uk/
>                       http://www.trypython.org/
>                       http://www.ironpython.info/
>                       http://www.theotherdelia.co.uk/
>                       http://www.resolverhacks.net/
>
>                       _______________________________________________
>                       Users mailing list
>                       Users at lists.ironpython.com
>             <mailto:Users at lists.ironpython.com>
>                    <mailto:Users at lists.ironpython.com
>             <mailto:Users at lists.ironpython.com>>
>                    <mailto:Users at lists.ironpython.com
>             <mailto:Users at lists.ironpython.com>
>                    <mailto:Users at lists.ironpython.com
>             <mailto:Users at lists.ironpython.com>>>
>
>                      
>             http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>
>
>                  
>              ------------------------------------------------------------------------
>
>                    _______________________________________________
>                    Users mailing list
>                    Users at lists.ironpython.com
>             <mailto:Users at lists.ironpython.com>
>             <mailto:Users at lists.ironpython.com
>             <mailto:Users at lists.ironpython.com>>
>                  
>              http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>                    
>
>
>                --    http://www.ironpythoninaction.com/
>                http://www.voidspace.org.uk/
>                http://www.trypython.org/
>                http://www.ironpython.info/
>                http://www.theotherdelia.co.uk/
>                http://www.resolverhacks.net/
>
>                _______________________________________________
>                Users mailing list
>                Users at lists.ironpython.com
>             <mailto:Users at lists.ironpython.com>
>             <mailto:Users at lists.ironpython.com
>             <mailto:Users at lists.ironpython.com>>
>              
>              http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>
>
>             ------------------------------------------------------------------------
>
>             _______________________________________________
>             Users mailing list
>             Users at lists.ironpython.com <mailto:Users at lists.ironpython.com>
>             http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>              
>
>
>
>         -- 
>         http://www.ironpythoninaction.com/
>         http://www.voidspace.org.uk/
>         http://www.trypython.org/
>         http://www.ironpython.info/
>         http://www.theotherdelia.co.uk/
>         http://www.resolverhacks.net/
>
>         _______________________________________________
>         Users mailing list
>         Users at lists.ironpython.com <mailto:Users at lists.ironpython.com>
>         http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>
>
>
>     _______________________________________________
>     Users mailing list
>     Users at lists.ironpython.com <mailto:Users at lists.ironpython.com>
>     http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>   


-- 
http://www.ironpythoninaction.com/
http://www.voidspace.org.uk/
http://www.trypython.org/
http://www.ironpython.info/
http://www.theotherdelia.co.uk/
http://www.resolverhacks.net/



More information about the Users mailing list