2

からのコードで動作するように「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>)

これを機能させる方法はありますか?

4

1 に答える 1