It'd be nice if getMultiAdapter's functionality was in reach without
typing: import zope.component; zope.component.getMultiAdapter. The
IFoo() single adapter lookup shows us a way to make this possible: a
method (in this case __call__ on the interface). It does bother me on
occasion that I need to invoke multi adaptation in such an entirely
different way. I must also note that it's a very common intuition to
want to do something like IFoo((a, b)).
Even though my intuition is usually like Jim's and prefer to have two
different methods, given different semantics, I consider the differences
in semantics here such a grey area I'm on the fence.
That the object itself is returned if it already provides the interface
in single adaptation is a difference in semantics, but since there's
just no possibility of doing so in the case of multi adaptation anyway,
you can argue whether this is a difference in semantics or not, just
some semantics that doesn't apply. __conform__ is a bigger difference,
but given that polymorphism abounds in object oriented code, having
different behavior with different inputs is not *that* surprising either.
Anyway, if we want to split methods, I'm fine with a properly named
method for multi-adaptation on the interface. For completeness' sake
you'd also want a properly named method on the interface for
IFoo.adapt() for normal adaptation
IFoo.multiadapt() for multi adaptation
sound reasonable to me. We then explain that if you call IFoo directly,
IFoo.adapt is called. These could then also be extended to support named
adapter lookup and such.
Since Jim is -0 on his variation, he's not really against it, if someone
else does the work, right? :)
Zope3-dev mailing list