instance/class methods: having my cake and eating it too
Donnal Walter
donnal at donnal.net
Fri Aug 30 11:23:05 EDT 2002
"Thomas Heller" <theller at python.net> wrote:
> Classes deriving from object can completely customize
> the binding process by implementing a __get__ method:
>
> class _BoundMethod:
> # Helper class.
> def __init__(self, func, first):
> self.func = func
> self.first = first
>
> def __call__(self, *args):
> return self.func(self.first, *args)
>
> class unimethod(object):
> # universal method: binds to either a class or an instance
> def __init__(self, func):
> self.func = func
>
> def __get__(self, inst, type=None):
> if inst is None:
> # bind to the class
> return _BoundMethod(self.func, type)
> else:
> # bind to the instance
> return _BoundMethod(self.func, inst)
>
> Then you can do:
>
> class Decimal:
> ...
> def SetDigits(cls_or_inst, ...):
> ....
>
> SetDigits = unimethod(SetDigits)
>
> -----
>
> Thomas
Thank you for this answer. It is *exactly* what I was looking for. I
had previously studied PEP 252 and other documentation related to it,
but somehow I don't think I ever would have come up with this solution
on my own. Now that I have seen your working example, however, I
understand better how descriptors work, and I thank you very much.
Donnal
More information about the Python-list
mailing list