0

我有一个代码可以使用 get multi 适配器查找 iterface。传递给多适配器的元素成员之一是提供该接口,但不提供元素本身。

我无法控制传递给多适配器的内容,但我可以控制包含其中一个元素的元素。我该如何标记它?通知多适配器那里有一些有用的东西,是否有类似provideAdapterFactory(cls, interface)的东西?

代码示例:

声明

class ImplementsInterface(object):
    implements(IMarker)

class Parent(object)
    child = ImplementsInterface()

抬头

some_members = zope.component.getMultiAdapter(((Parent()), IMarker)

现在,如果我像这样运行代码,它将产生ComponentLookupError,同时我无法修改查找代码或多适配器,或者就此而言,我无法将 'implements(IMarker) 分配给 Parent,因为 parent 已经实现了不同的接口和会破坏很多其他的东西。

更新:

我想我已经从第 6.1 章多适配器中找到了一个我可以理解的解释

更新 2:我认为我没有在我的单元测试代码中正确初始化 zca,这是一个片段

import unittest2 as unittest
from zope.traversing.adapters import DefaultTraversable
from z3c.form.testing import TestRequest
from z3c.form import testing, field
from zope import component


class TestFunctionalForm(unittest.TestCase):
    def setUp(self):
        testing.setUp(self)
        component.provideAdapter(field.FieldWidgets)
        component.provideAdapter(DefaultTraversable, [None])
        self.context = self.globs['root']
    def tearDown(self):
        testing.tearDown(self)
4

0 回答 0