On Nov 28, 5:36 am, manatlan <[EMAIL PROTECTED]> wrote: > I'd like to make a "jquery python wrapper" ... > > here is my code : > =================================================================== > #!/usr/bin/env python > # -*- coding: utf-8 -*- > > class JQueryCaller(object): > def __init__(self,callback): > self.__callback=callback > self._s=[] > > def __getattr__(self,name): > def _caller(*args): > sargs=["'%s'"%i for i in args] > self._s.append("%s(%s)"%(name,",".join(sargs))) > return self > return _caller > > def __call__(self): > return self.__callback(".".join(self._s)) > > class MyObject(object): > def __init__(self): > self.js = JQueryCaller(self.__add) > > def __add(self,j): > print "Add:"+j > > if __name__ == "__main__": > o=MyObject() > > o.js.kiki(12).kuku()() > =================================================================== > If i run the script : it will display : > > Add:kiki('12').kuku() > > Because the JQueryCaller caller is called, by the "()" trick at the > end of the last line > > I'd like to display the same thing, but without the need to put the > "()" at then end ! > (by calling simply : "o.js.kiki(12).kuku()" not "o.js.kiki(12).kuku() > ()") > (or how to call the MyObject._add (callback) without using the caller > on my JQueryCaller)
Why don't you rename __call__ to __str__ and have MyObject.__add return a string instead of printing it directly? class MyObject(object): def __add(self,j): return "Add:"+j if __name__ == "__main__": o = MyObject() s = o.js.kiki(12).kuku() print s HTH, George -- http://mail.python.org/mailman/listinfo/python-list