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

Reply via email to