Nick Coghlan added the comment:

I like your suggestion of not providing __call__(), as I don't see a way to 
make it work with arbitrary underlying descriptors, and neither classmethod nor 
staticmethod is callable.

In terms of usage, I think this approach will be OK, as in practice I expect 
@classmethod, etc, will be applied to the initial method definition as 
appropriate, so they won't need to be inline except in test cases like these.

Additional test cases needed:

    A().add10class(5)
    A().add10static(5)
    A.add10(A(), 5)

All three should produce 15 as the result, and print the same thing as the 
following:

    A.add10class(5)
    A.add10static(5)
    A().add10(5)

A test method that uses a partial instance as the callable would also be 
helpful in assuring the edge cases are covered.

I believe it may be necessary to have a __get__ method something like:

    def _make_unbound_method(self, cls):
        def _unbound_method(*args, **kwds):
            call_keywords = self.keywords.copy()
            call_keywords.update(keywords)
            return self.func(*(self.args + args), **call_keywords)
        _unbound_method.__objclass__ = cls
        return _unbound_method


    def __get__(self, obj, cls):
        get = getattr(self.func, "__get__")
        if get is None:
            if obj is None:
                return self._make_unbound_method(cls)
            callable = self.func
        else:
            callable = get(obj, cls)
            if callable is self.func:
                return self._make_unbound_method(cls)
        return partial(callable, *self.args, **self.keywords)

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue4331>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to