2
考慮下面的代碼:問題與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 2013-05-02 16:18:19
@Ben:指定的訂戶或指定的適配器? – 2013-05-02 16:18:55
@Ben:指定的訂閱者實際上是一個尚未實現的功能(註冊一個用戶名稱此時引發了一個「TypeError」)。 – 2013-05-02 16:21:22