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

Michael Stephens falcon at uwyo.edu
Fri Jun 27 19:26:33 CEST 2008


Actually.. this is working now... The instance is nessessary because we need
state with the object

def get(obj):
 lst=dir(obj)
 mydict={'_hack':-1}
 for x in lst :
  mydict[x]=eval('obj.'+x)
 return mydict


def test():
 print "global test"

class RT:
 def test(_self_):
  print 'RT test'
 def Evaluate(self,code):
  eval(code,{'test': self.test}) #works
  eval(code,get(self))#works too


test()
a.test()
a=RT()
a.Evaluate('test()')




Michael Stephens

Electrical Engineering Graduate Student
University of Wyoming
falcon at uwyo.edu or 89iroc at gmail.com

On Fri, Jun 27, 2008 at 11:21 AM, Jonathan Slenders <jonathan at slenders.be>
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??)
>
> 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>:
>
> 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 or 89iroc at gmail.com
>>
>> On Fri, Jun 27, 2008 at 11:02 AM, Michael Foord <
>> 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> or 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>> 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>> 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: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>>> 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>>> 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>>>
>>>>
>>>> ------------------------------------------------------------------------
>>>>
>>>>               _______________________________________________
>>>>               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
>>>> 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
>>> 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
>>
>>
>
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ironpython-users/attachments/20080627/f786639a/attachment.html>


More information about the Ironpython-users mailing list