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

Jonathan Slenders jonathan at slenders.be
Fri Jun 27 10:21:23 PDT 2008


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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ironpython.com/pipermail/users-ironpython.com/attachments/20080627/6b30b8cb/attachment-0001.htm>


More information about the Users mailing list