Hi Simon,

> On 28 Mai, 18:12, Florent Hivert <florent.hiv...@univ-rouen.fr> wrote:
> > Just to let you know, I tried the following work around:
> >
> > ...
> > but since A.toto.f.__name__ is still toto. It doesn't work. However the
> > following works (on unpatched sage-4.6.2):
> >
> > def change_name(fun, name):
> >     fun = copy(fun)
> >     fun.__name__ = name
> >     return fun
> >
> > class CC(A):
> >     toto_cached = cached_method(change_name(A.toto.f, "toto_cached"))
> >     def toto(self, arg=2):
> >         return self.toto_cached(arg)
> 
> Note that my patch adds an optional argument "name" to the cached
> method decorator.

Excellent !

> So, your work-around is easily possible with my patch:
> 
> sage: class A(SageObject):
> ....:     @cached_method
> ....:     def toto(self,arg):
> ....:         return arg+1
> ....:
> sage: class CC(A):
> ....:     toto_cached = cached_method(A.toto.f,name="toto_cached")
> ....:     def toto(self,arg=2):
> ....:         return self.toto_cached(arg)
> ....:
> sage: c = CC()
> sage: c.toto()
> 3
> sage: c.toto()
> 3
> sage: c.toto() is c.toto()
> True
> 
> However, it is a work-around and not an actual solution, IMO.

I completely agree,

Florent

-- 
To post to this group, send an email to sage-devel@googlegroups.com
To unsubscribe from this group, send an email to 
sage-devel+unsubscr...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sage-devel
URL: http://www.sagemath.org

Reply via email to