Actually.. this is working now... The instance is nessessary because we need state with the object<br><br>def get(obj):<br> lst=dir(obj)<br> mydict={'_hack':-1}<br> for x in lst :<br> mydict[x]=eval('obj.'+x)<br>
return mydict<br><br><br>def test():<br> print "global test"<br><br>class RT:<br> def test(_self_):<br> print 'RT test'<br> def Evaluate(self,code):<br> eval(code,{'test': self.test}) #works<br>
eval(code,get(self))#works too<br><br><br>test()<br>a.test()<br>a=RT()<br>a.Evaluate('test()')<br><br><br><br clear="all"><br>Michael Stephens<br><br>Electrical Engineering Graduate Student<br>University of Wyoming<br>
<a href="mailto:falcon@uwyo.edu">falcon@uwyo.edu</a> or <a href="mailto:89iroc@gmail.com">89iroc@gmail.com</a>
<br><br><div class="gmail_quote">On Fri, Jun 27, 2008 at 11:21 AM, Jonathan Slenders <<a href="mailto:jonathan@slenders.be">jonathan@slenders.be</a>> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
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??)<br><br>But why do you actually want to do this? If the class instance is not important, just make a static method of this one.<div class="Ih2E3d">
<br>
<br>class RT(object):<br> def Evaluate(self, code):<br></div> def generateContext():<br> def dropself(f):<br> def g(*p):<br> f(self)<br>
return g<br> context = {}<br> for f in RT.__dict__:<br> context[f] = dropself(RT.__dict__[f])<br> return context<br>
<br> eval(code, generateContext())<div class="Ih2E3d"><br><br> def test(self):<br> print 'RT test'<br><br></div>RT().Evaluate('test()')<br><br><br><br><br><br><br><div class="gmail_quote">
2008/6/27 Michael Stephens <<a href="mailto:falcon@uwyo.edu" target="_blank">falcon@uwyo.edu</a>>:<div><div></div><div class="Wj3C7c"><br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Is there anyway cool way you know of to generate the context at runtime<br>def Evaluate(_self_,code)<br>
exec code in GenerateContext(a)<div><br><br clear="all"><br>Michael Stephens<br><br>Electrical Engineering Graduate Student<br>
University of Wyoming<br></div><a href="mailto:falcon@uwyo.edu" target="_blank">falcon@uwyo.edu</a> or <a href="mailto:89iroc@gmail.com" target="_blank">89iroc@gmail.com</a>
<br><div><div></div><div><br><div class="gmail_quote">On Fri, Jun 27, 2008 at 11:02 AM, Michael Foord <<a href="mailto:fuzzyman@voidspace.org.uk" target="_blank">fuzzyman@voidspace.org.uk</a>> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div>Michael Stephens wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
I guess I can rebind locals and functions into my own dictionary.. I was just hoping to avoid that with some snazzy python.<br>
<br>
</blockquote></div>
I think exec'ing in a custom context is *more* snazzy Python. :-p<br><font color="#888888">
<br>
Michael<br>
<br>
</font><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div>
Michael Stephens<br>
<br>
Electrical Engineering Graduate Student<br>
University of Wyoming<br>
<a href="mailto:falcon@uwyo.edu" target="_blank">falcon@uwyo.edu</a> <mailto:<a href="mailto:falcon@uwyo.edu" target="_blank">falcon@uwyo.edu</a>> or <a href="mailto:89iroc@gmail.com" target="_blank">89iroc@gmail.com</a> <mailto:<a href="mailto:89iroc@gmail.com" target="_blank">89iroc@gmail.com</a>><br>
<br></div><div>
On Fri, Jun 27, 2008 at 10:58 AM, Michael Foord <<a href="mailto:fuzzyman@voidspace.org.uk" target="_blank">fuzzyman@voidspace.org.uk</a> <mailto:<a href="mailto:fuzzyman@voidspace.org.uk" target="_blank">fuzzyman@voidspace.org.uk</a>>> wrote:<br>
<br>
Michael Stephens wrote:<br>
<br></div><div>
Closer.. but self.__dict__ is empty and cannot find test. We<br>
are trying to wire up property expressions in our system. So<br>
control.Enable="GetEnabled()" rather than what we have now<br>
which is control.Enable="currentform.GetEnabled()"<br>
<br>
I thought I could eval the RHS inside the class to get what i<br>
wanted but alas no dice.<br>
<br>
<br>
Well, you could do it in RT.__dict__ - but you would have to make<br>
test a staticmethod.<br>
<br>
Why not maintain an explicit dictionary as a context?<br>
<br>
Michael<br>
<br>
Michael Stephens<br>
<br>
Electrical Engineering Graduate Student<br>
University of Wyoming<br>
<a href="mailto:falcon@uwyo.edu" target="_blank">falcon@uwyo.edu</a> <mailto:<a href="mailto:falcon@uwyo.edu" target="_blank">falcon@uwyo.edu</a>><br></div><div>
<mailto:<a href="mailto:falcon@uwyo.edu" target="_blank">falcon@uwyo.edu</a> <mailto:<a href="mailto:falcon@uwyo.edu" target="_blank">falcon@uwyo.edu</a>>> or<br>
<a href="mailto:89iroc@gmail.com" target="_blank">89iroc@gmail.com</a> <mailto:<a href="mailto:89iroc@gmail.com" target="_blank">89iroc@gmail.com</a>><br>
<mailto:<a href="mailto:89iroc@gmail.com" target="_blank">89iroc@gmail.com</a> <mailto:<a href="mailto:89iroc@gmail.com" target="_blank">89iroc@gmail.com</a>>><br>
<br></div><div><div></div><div>
On Fri, Jun 27, 2008 at 10:46 AM, Michael Foord<br>
<<a href="mailto:fuzzyman@voidspace.org.uk" target="_blank">fuzzyman@voidspace.org.uk</a> <mailto:<a href="mailto:fuzzyman@voidspace.org.uk" target="_blank">fuzzyman@voidspace.org.uk</a>><br>
<mailto:<a href="mailto:fuzzyman@voidspace.org.uk" target="_blank">fuzzyman@voidspace.org.uk</a><br>
<mailto:<a href="mailto:fuzzyman@voidspace.org.uk" target="_blank">fuzzyman@voidspace.org.uk</a>>>> wrote:<br>
<br>
Michael Stephens wrote:<br>
<br>
I want to be able to execute arbitrary expressions but have<br>
their context be within my class. The end result is<br>
that RT<br>
test should be printed and not global test<br>
<br>
def test():<br>
print "global test"<br>
<br>
class RT:<br>
def test(_self_):<br>
print 'RT test'<br>
def Evaluate(_self_,code):<br>
eval(code)<br>
<br>
<br>
exec code in self.__dict__<br>
<br>
Might work.<br>
<br>
Michael<br>
<br>
<br>
test()<br>
a.test()<br>
a=RT()<br>
a.Evaluate('test()')<br>
<br>
Michael Stephens<br>
<br>
Electrical Engineering Graduate Student<br>
University of Wyoming<br>
<a href="mailto:falcon@uwyo.edu" target="_blank">falcon@uwyo.edu</a> <mailto:<a href="mailto:falcon@uwyo.edu" target="_blank">falcon@uwyo.edu</a>><br>
<mailto:<a href="mailto:falcon@uwyo.edu" target="_blank">falcon@uwyo.edu</a> <mailto:<a href="mailto:falcon@uwyo.edu" target="_blank">falcon@uwyo.edu</a>>><br>
<mailto:<a href="mailto:falcon@uwyo.edu" target="_blank">falcon@uwyo.edu</a> <mailto:<a href="mailto:falcon@uwyo.edu" target="_blank">falcon@uwyo.edu</a>><br>
<mailto:<a href="mailto:falcon@uwyo.edu" target="_blank">falcon@uwyo.edu</a> <mailto:<a href="mailto:falcon@uwyo.edu" target="_blank">falcon@uwyo.edu</a>>>> or<br>
<br>
<a href="mailto:89iroc@gmail.com" target="_blank">89iroc@gmail.com</a> <mailto:<a href="mailto:89iroc@gmail.com" target="_blank">89iroc@gmail.com</a>><br>
<mailto:<a href="mailto:89iroc@gmail.com" target="_blank">89iroc@gmail.com</a> <mailto:<a href="mailto:89iroc@gmail.com" target="_blank">89iroc@gmail.com</a>>><br>
<mailto:<a href="mailto:89iroc@gmail.com" target="_blank">89iroc@gmail.com</a> <mailto:<a href="mailto:89iroc@gmail.com" target="_blank">89iroc@gmail.com</a>><br>
<mailto:<a href="mailto:89iroc@gmail.com" target="_blank">89iroc@gmail.com</a> <mailto:<a href="mailto:89iroc@gmail.com" target="_blank">89iroc@gmail.com</a>>>><br>
------------------------------------------------------------------------<br>
<br>
_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a><br>
<mailto:<a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a>><br>
<mailto:<a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a><br>
<mailto:<a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a>>><br>
<br>
<a href="http://lists.ironpython.com/listinfo.cgi/users-ironpython.com" target="_blank">http://lists.ironpython.com/listinfo.cgi/users-ironpython.com</a><br>
<br>
<br>
-- <a href="http://www.ironpythoninaction.com/" target="_blank">http://www.ironpythoninaction.com/</a><br>
<a href="http://www.voidspace.org.uk/" target="_blank">http://www.voidspace.org.uk/</a><br>
<a href="http://www.trypython.org/" target="_blank">http://www.trypython.org/</a><br>
<a href="http://www.ironpython.info/" target="_blank">http://www.ironpython.info/</a><br>
<a href="http://www.theotherdelia.co.uk/" target="_blank">http://www.theotherdelia.co.uk/</a><br>
<a href="http://www.resolverhacks.net/" target="_blank">http://www.resolverhacks.net/</a><br>
<br>
_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a><br>
<mailto:<a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a>><br>
<mailto:<a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a><br></div></div><div><div></div><div>
<mailto:<a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a>>><br>
<br>
<a href="http://lists.ironpython.com/listinfo.cgi/users-ironpython.com" target="_blank">http://lists.ironpython.com/listinfo.cgi/users-ironpython.com</a><br>
<br>
<br>
------------------------------------------------------------------------<br>
<br>
_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a> <mailto:<a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a>><br>
<a href="http://lists.ironpython.com/listinfo.cgi/users-ironpython.com" target="_blank">http://lists.ironpython.com/listinfo.cgi/users-ironpython.com</a><br>
<br>
<br>
<br>
-- <a href="http://www.ironpythoninaction.com/" target="_blank">http://www.ironpythoninaction.com/</a><br>
<a href="http://www.voidspace.org.uk/" target="_blank">http://www.voidspace.org.uk/</a><br>
<a href="http://www.trypython.org/" target="_blank">http://www.trypython.org/</a><br>
<a href="http://www.ironpython.info/" target="_blank">http://www.ironpython.info/</a><br>
<a href="http://www.theotherdelia.co.uk/" target="_blank">http://www.theotherdelia.co.uk/</a><br>
<a href="http://www.resolverhacks.net/" target="_blank">http://www.resolverhacks.net/</a><br>
<br>
_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a> <mailto:<a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a>><br>
<a href="http://lists.ironpython.com/listinfo.cgi/users-ironpython.com" target="_blank">http://lists.ironpython.com/listinfo.cgi/users-ironpython.com</a><br>
<br>
<br>
------------------------------------------------------------------------<br>
<br>
_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a><br>
<a href="http://lists.ironpython.com/listinfo.cgi/users-ironpython.com" target="_blank">http://lists.ironpython.com/listinfo.cgi/users-ironpython.com</a><br>
<br>
</div></div></blockquote><div><div></div><div>
<br>
<br>
-- <br>
<a href="http://www.ironpythoninaction.com/" target="_blank">http://www.ironpythoninaction.com/</a><br>
<a href="http://www.voidspace.org.uk/" target="_blank">http://www.voidspace.org.uk/</a><br>
<a href="http://www.trypython.org/" target="_blank">http://www.trypython.org/</a><br>
<a href="http://www.ironpython.info/" target="_blank">http://www.ironpython.info/</a><br>
<a href="http://www.theotherdelia.co.uk/" target="_blank">http://www.theotherdelia.co.uk/</a><br>
<a href="http://www.resolverhacks.net/" target="_blank">http://www.resolverhacks.net/</a><br>
<br>
_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a><br>
<a href="http://lists.ironpython.com/listinfo.cgi/users-ironpython.com" target="_blank">http://lists.ironpython.com/listinfo.cgi/users-ironpython.com</a><br>
</div></div></blockquote></div><br>
</div></div><br>_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@lists.ironpython.com" target="_blank">Users@lists.ironpython.com</a><br>
<a href="http://lists.ironpython.com/listinfo.cgi/users-ironpython.com" target="_blank">http://lists.ironpython.com/listinfo.cgi/users-ironpython.com</a><br>
<br></blockquote></div></div></div><br>
<br>_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@lists.ironpython.com">Users@lists.ironpython.com</a><br>
<a href="http://lists.ironpython.com/listinfo.cgi/users-ironpython.com" target="_blank">http://lists.ironpython.com/listinfo.cgi/users-ironpython.com</a><br>
<br></blockquote></div><br>