[IronPython] Evaluating python from within the context of a class
Michael Foord
fuzzyman at voidspace.org.uk
Fri Jun 27 19:26:28 CEST 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 Ironpython-users
mailing list