My opinions:

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 single-adaptation.

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
Unsub: http://mail.zope.org/mailman/options/zope3-dev/archive%40mail-archive.com

Reply via email to