On 28 nov, 17:12, Peter Otten <[EMAIL PROTECTED]> wrote: > manatlan wrote: > > To explain better, here is another code > > 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(list): > > def __init__(self): > > list.__init__([]) > > > js=property(lambda self:JQueryCaller(self.__add)) > > > def __add(self,j): > > self.append(j) > > > if __name__ == "__main__": > > o=MyObject() > > > o.js.kiki(12).kuku()() > > o.js.kiki(12).kuku().roro("gfde")() > > > assert o==["kiki('12').kuku()", "kiki('12').kuku().roro('gfde')"] > > here, it uses the __call__ of JQueryCaller by adding the "()" trick at > > the end ... > > > I'd really like to have the same result, without the "()" trick, like > > this: > > > o=MyObject() > > > o.js.kiki(12).kuku() > > o.js.kiki(12).kuku().roro("gfde") > > > assert o==["kiki('12').kuku()", "kiki('12').kuku().roro('gfde')"] > > You could preallocate slots in MyObject: > > from functools import partial > > 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))) > self.__callback(".".join(self._s)) > return self > return _caller > > class MyObject(list): > def __init__(self): > list.__init__([]) > > @property > def js(self): > n = len(self) > self.append(None) > return JQueryCaller(partial(self._add, n)) > > def _add(self, i, j): > self[i] = j > > if __name__ == "__main__": > o=MyObject() > > o.js.kiki(12).kuku() > o.js.kiki(12).kuku().roro("gfde") > > assert o==["kiki('12').kuku()", "kiki('12').kuku().roro('gfde')"] > > This will course fail if you try things like > > a = o.js.kiki > a(1) > a(2) > > Peter
great ! you've found the way ! I don't understant the trick for now, but i will study it ! But it works like expected ! great ! thanks a lot -- http://mail.python.org/mailman/listinfo/python-list