Shane Hathaway wrote:
Chris Withers wrote:
From a user's perspective, this makes no sense:
from zope.interface import implements,Interface from zope.component import queryAdapter class ISomething(Interface): pass ... class MyClass: implements(ISomething) ... m = MyClass()
Right, so this does make sense:
ISomething(m) <__main__.MyClass instance at 0x00BED6E8>
This does not:
repr(queryAdapter(m,ISomething)) 'None'
Looks like a bug to me. If the object passed as the first argument to queryAdapter() implements the interface passed as the second argument, I believe queryAdapter() should return the object, regardless of any component registrations.
No, it's not a bug. This is in fact a feature (like it or not). {query|get}Adapter will always try to look up an adapter, whether or not the object provides the interface. So the behaviour Chris observed is indeed intended. I agree it could be documented better.