Currently if you ask a registry to singly-adapt an object to an interface, and the object you're trying to adapt implements that interface, here's what happens:
>>> from zope.component.registry import Components >>> c = Components() >>> from zope.interface import Interface, implements >>> class IFoo(Interface): pass ... >>> class Foo(object): ... implements(IFoo) ... >>> foo = Foo() >>> c.queryAdapter(IFoo, foo) <None> In order to get the object itself back from such an adaptation, you need to use the default= argument. >>> c.queryAdapter(IFoo, foo, default=foo) <__main__.Foo object at 0x24a3910> This seems slightly inconsistent with the adaptation worldview imposed by getAdapter/queryAdapter. I think it would be more consistent if "c.queryAdapter(IFoo, foo)" returned foo if foo already implemented IFoo and there was no other more specific adapter registered for the IFoo/foo pair in the registry, no? Let the bikeshedding begin, - C _______________________________________________ Zope-Dev maillist - Zope-Dev@zope.org https://mail.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - https://mail.zope.org/mailman/listinfo/zope-announce https://mail.zope.org/mailman/listinfo/zope )