[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