[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