Interface(obj)和getAdapter(obj,Interface)之间的Zope组件差异

时间:2012-12-17 16:58:16

标签: python zope zope.interface zope3 zope.component

什么可能导致接口(obj)返回obj,而getAdapter(obj,接口)返回一个适当调整的对象?

1 个答案:

答案 0 :(得分:2)

如果给定实例已提供接口,则IInterface(instance)将返回传入的实例。毕竟,它已经满足要求,如果您需要使用instance方法,可以直接使用IInterface

>>> import zope.interface
>>> class IFoo(zope.interface.Interface):
...     pass
... 
>>> class Foo(object):
...     zope.interface.implements(IFoo)
...     pass
... 
>>> foo = Foo()
>>> IFoo(foo)
<__main__.Foo object at 0x10eed22d0>
>>> IFoo.providedBy(foo)
True

getAdapter()直接转到适配器注册表,如果您将给定类的适配器注册到IInterface,那么将返回该适配器。这有点无意义,因为原始对象已经提供了接口,因此不需要进行任何调整。