からのコードで動作するように「C++ キャストのような」適応を取得したいと思いますzope.interface
。私の実際の使用例では、からのレジストリを使用していますPyramid
が、から派生していますzope.interface.registry.Components
.changes.txtによると、に依存せずにこのようなものを使用できるように導入されましたzope.components
. そして、次の例は完全で自己完結型です。
from zope.interface import Interface, implements
from zope.interface.registry import Components
registry = Components()
class IA(Interface):
pass
class IB(Interface):
pass
class A(object):
implements(IA)
class B(object):
implements(IB)
def __init__(self,other):
pass
registry.registerAdapter(
factory=B,
required=[IA]
)
a = A()
b = registry.getAdapter(a,IB) # why instance of B and not B?
b = IB(A()) # how to make it work?
registry.getAdapter
私の場合、インスタンスである適応オブジェクトをすでに返すのはなぜだろうかB
。class が返されることを期待していましたB
が、アダプタという用語の理解が間違っている可能性があります。この行が機能し、明らかに適応コードが正しく登録されているため、最後の行も機能すると予想されます。しかし、次のようなエラーで失敗します。
TypeError: (「適応できませんでした」、<....0x4d1c3d0 のオブジェクト>、< InterfaceClass ....IB>)
これを機能させる方法はありますか?