[Interface-dev] Twisted usage of zope interface in Zope3 SVN

Jim Fulton jim at zope.com
Tue Sep 26 06:26:52 EDT 2006

On Sep 25, 2006, at 8:01 PM, Christopher Armstrong wrote:

> On 9/25/06, Jim Fulton <jim at zope.com> wrote:
> On Sep 22, 2006, at 5:08 PM, Christopher Armstrong wrote:
> > Now, if there is a method IFoo.__adapt__, and one calls IFoo(o),
> > that method will not be called when using the C optimizations,
> > because the C implementation of __call__ just directly calls the C
> > implementation of __adapt__ without looking it up as a method on
> > the interface object.
> >
> > Is this a bug?
> No.  PEP 246 doesn't specify a protocol __call__ method so I don't
> feel bound by it.  I never considered it a use case to be able to
> override __adapt__ for interfaces.  If you want to do that, then
> you'll have to override __call__ as well.  Do you want to override
> __adapt__? If so, why?
> That's fine, I guess. One could argue that the documentation is at  
> least unclear or perhaps even incorrect, on this point, then:
> (from README.txt)
> """
> This method is normally not called directly. It is called by the PEP
> 246 adapt framework and by the interface __call__ operator.
> """

OK, I'll fix that.


> To answer your question about why we're overriding __adapt__: I  
> didn't do this myself, but I tracked down the developer who did and  
> he claimed that this was a more efficient way of overriding the way  
> one particular interface adapts things. Adding an adapter_hook adds  
> an extra function call and extends check to a ton of potential  
> interface adaptations. I guess I will try to convert this to an  
> overridden __call__.

So why do you need one interface to be adapted differently than others?


Jim Fulton			mailto:jim at zope.com		Python Powered!
CTO 				(540) 361-1714			http://www.python.org
Zope Corporation	http://www.zope.com		http://www.zope.org

More information about the Interface-dev mailing list