Great exercise for python expert !

George Sakkis george.sakkis at gmail.com
Fri Nov 28 14:58:12 CET 2008


On Nov 28, 5:36 am, manatlan <manat... at gmail.com> 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



More information about the Python-list mailing list