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

Michael Foord fuzzyman at voidspace.org.uk
Fri Jun 27 19:29:05 CEST 2008


Michael Foord wrote:
> 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)
Oops.


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

Sorry.

Michael

>
> 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 Ironpython-users mailing list