Great exercise for python expert !

manatlan manatlan at gmail.com
Fri Nov 28 05:36:28 EST 2008


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)

Really needs some help ... and it's a great exercise too ;-)
(3 hours on that, and don't find a way to resolve that, because I
can't find a way to terminate the recursivity in the getattr way)



More information about the Python-list mailing list