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
[EMAIL PROTECTED] or [EMAIL PROTECTED]
On Fri, Jun 27, 2008 at 11:21 AM, Jonathan Slenders <[EMAIL PROTECTED]>
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 <[EMAIL PROTECTED]>:
>
> 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
>> [EMAIL PROTECTED] or [EMAIL PROTECTED]
>>
>> On Fri, Jun 27, 2008 at 11:02 AM, Michael Foord <
>> [EMAIL PROTECTED]> 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
>>>> [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> or [EMAIL PROTECTED] <mailto:
>>>> [EMAIL PROTECTED]>
>>>>
>>>> On Fri, Jun 27, 2008 at 10:58 AM, Michael Foord <
>>>> [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> 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
>>>> [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
>>>> <mailto:[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> or
>>>> [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
>>>> <mailto:[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>
>>>>
>>>> On Fri, Jun 27, 2008 at 10:46 AM, Michael Foord
>>>> <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
>>>> <mailto:[EMAIL PROTECTED]
>>>> <mailto:[EMAIL PROTECTED]>>> 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
>>>> [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
>>>> <mailto:[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>
>>>> <mailto:[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
>>>> <mailto:[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>> or
>>>>
>>>> [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
>>>> <mailto:[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>
>>>> <mailto:[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
>>>> <mailto:[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>>
>>>>
>>>> ------------------------------------------------------------------------
>>>>
>>>> _______________________________________________
>>>> Users mailing list
>>>> [email protected]
>>>> <mailto:[email protected]>
>>>> <mailto:[email protected]
>>>> <mailto:[email protected]>>
>>>>
>>>>
>>>> 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
>>>> [email protected]
>>>> <mailto:[email protected]>
>>>> <mailto:[email protected]
>>>> <mailto:[email protected]>>
>>>>
>>>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>>>
>>>>
>>>>
>>>> ------------------------------------------------------------------------
>>>>
>>>> _______________________________________________
>>>> Users mailing list
>>>> [email protected] <mailto:[email protected]>
>>>> 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
>>>> [email protected] <mailto:[email protected]>
>>>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>>>
>>>>
>>>> ------------------------------------------------------------------------
>>>>
>>>> _______________________________________________
>>>> Users mailing list
>>>> [email protected]
>>>> 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
>>> [email protected]
>>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>>
>>
>>
>> _______________________________________________
>> Users mailing list
>> [email protected]
>> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>>
>>
>
> _______________________________________________
> Users mailing list
> [email protected]
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>
>
_______________________________________________
Users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com