Descriptor/Decorator challenge

George Sakkis george.sakkis at gmail.com
Mon Mar 5 22:26:33 EST 2007


On Mar 5, 2:31 am, "Raymond Hettinger" <pyt... at rcn.com> wrote:

> I had an idea but no time to think it through.
> Perhaps the under-under name mangling trick
> can be replaced (in Py3.0) with a suitably designed decorator.
> Your challenge is to write the decorator.
> Any trick in the book (metaclasses, descriptors, etc) is fair game.
>
> Raymond
>
> -------- how we currently localize method access with name mangling
> ------
> class A:
>     def __m(self):
>         print 'A.__m'
>     def am(self):
>         self.__m()
>
> class B(A):
>     def __m(self):
>         print 'B.__m'
>     def bm(self):
>         self.__m()
>
> m = B()
> m.am()     # prints 'A.__m'
> m.bm()     # prints 'B.__m'
>
> -------- how I would like to localize method access with a decorator
> ------
> class A:
>     @localmethod
>     def m(self):
>         print 'A.m'
>     def am(self):
>         self.m()
>
> class B(A):
>     @localmethod
>     def m(self):
>         print 'B.m'
>     def bm(self):
>         self.m()
>
> m = B()
> m.am()     # prints 'A.m'
> m.bm()     # prints 'B.m'
>
> ---------------------
>
> P.S. Here's a link to the descriptor how-to:
>    http://users.rcn.com/python/download/Descriptor.htm

What would the semantics be if m is decorated as local only in A or
only in B ?

George




More information about the Python-list mailing list