[Python-3000] PEP 3124 - Overloading, Generic Functions, Interfaces, etc.
Talin
talin at acm.org
Wed May 2 04:21:28 CEST 2007
Phillip J. Eby wrote:
> At 09:13 AM 5/1/2007 -0700, Talin wrote:
>> Phillip J. Eby wrote:
>>> Proceeding to the "Next" Method
>>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>> If the first parameter of an overloaded function is named
>>> ``__proceed__``, it will be passed a callable representing the next
>>> most-specific method. For example, this code::
>>> def foo(bar:object, baz:object):
>>> print "got objects!"
>>> @overload
>>> def foo(__proceed__, bar:int, baz:int):
>>> print "got integers!"
>>> return __proceed__(bar, baz)
>>
>> I don't care for the idea of testing against a specially named
>> argument. Why couldn't you just have a different decorator, such as
>> "overload_chained" which triggers this behavior?
>
> The PEP lists *five* built-in decorators, all of which support this
> behavior::
>
> @overload, @when, @before, @after, @around
>
> And in addition, it demonstrates how to create *new* method combination
> decorators, that *also* support this behavior (e.g. '@discount').
>
> All in all, there are an unbounded number of possible decorators that
> would require chained and non-chained variations.
Well, I suppose you could make "chained" a modifier of the decorator, so
for example @operator.chained, @discount.chained, and so on. In other
words, the decorator can be called directly, or the attribute 'chained'
also produces a callable that causes the modified behavior. Moreover,
this would support an arbitrary number of modifiers on the decorator,
such as @overload.chained.strict(True).whatever.
-- Talin
More information about the Python-3000
mailing list