[Zope-dev] implementing zope.component 4.0

Chris McDonough chrism at plope.com
Mon Nov 30 11:51:15 EST 2009

Tres Seaver wrote:
> Hash: SHA1
> Gary Poster wrote:
>> On Nov 27, 2009, at 6:32 AM, Martijn Faassen wrote:
>>> Utility lookups versus adapter lookups
>>> --------------------------------------
>>> There was some discussion on whether utility lookups are really 
>>> something fundamentally different than adaptation as adaptation 
>>> *creates* a new instance while utility lookup uses a registered 
>>> instance. I think the essential part here is however: "give me an 
>>> instance that implements IFoo", and utility lookup fits there. We could 
>>> even envision a way to create utilities that *does* instantiate them on 
>>> the fly - it shouldn't affect the semantics for the user of the utility.
>> As above, I disagree.
> The root of the disagreement here is that you seem to want the *caller*
> to care about something which is important only to the person who
> *registers* the thing being looked up.  From the caller's perspective,
> the call site needs an object implementing IFoo, looked up using some
> number N of context arguments, where N could be 0 (no context required
> to find the object).  The fact that, under the hood, an adapter lookup
> happens to call a factory, passing the context args, is not relevant *to
> the caller*.

I understand that the idea explained above is conceptually integral to a lot of 
people, and basically unquestionable.  But as devil's advocate sort of thing 
can we put this traditional worldview aside for a minute,  and just sort of 
take this from ground zero?

In "normal Python", callers often do need to understand whether the function 
they're calling is a factory which constructs a new object, or a function which 
returns a "global", because the caller needs to know what the impact of 
mutating the result is.

We call non-factories utilities and we call factories adapters.  So the caller 
*already* needs to make a distinction between the two.

- C

More information about the Zope-Dev mailing list