Given the following code:
from zope.component import getGlobalSiteManager, adapts, subscribers
from zope.interface import Interface, implements
class A(object): pass
class B(object): pass
class C(B): pass
class AB(object):
implements(Interface)
adapts(A, B)
def __init__(self, a, b):
pass
class AC(object):
implements(Interface)
adapts(A, C)
def __init__(self, a, c):
pass
gsm = getGlobalSiteManager()
gsm.registerSubscriptionAdapter(AB)
gsm.registerSubscriptionAdapter(AC)
a = A()
c = C()
for adapter in subscribers([a, c], Interface):
print adapter
The output it produces is:
<__main__.AB object at 0xb242290>
<__main__.AC object at 0xb2422d0>
Why is an instance of AB returned? AB only declares that it adapts A and B. Is there a way I can achieve behavior where only AC would be returned?