Учитывая следующий код:Проблемы с zope.component абонентских адаптеров адаптации несколько объектов
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
Выхода он производит:
<__main__.AB object at 0xb242290>
<__main__.AC object at 0xb2422d0>
Почему экземпляр AB вернулся? AB только заявляет, что он адаптирует A и B. Есть ли способ, которым я могу достичь поведения, когда будет возвращен только AC?
Есть ли способ использовать именованные абонентов? Я могу видеть, как их регистрировать, но не как их получить. – Ben
@Ben: Именованные подписчики или именованные адаптеры? –
@Ben: названные абоненты на самом деле являются функцией, которая еще не реализована (регистрация имени для абонента вызывает «TypeError» на данный момент). –