[Twisted-Python] Adapter for a class, not for an instance
Andrew Bennetts
andrew-twisted at puzzling.org
Wed Aug 22 00:28:11 MDT 2007
This is really a Zope question, not Twisted question. You'll probably get
better answers by asking on a Zope mailing list. Anyway...
Vincent Bernat wrote:
[...]
>
> Here is what I do.
>
> from zope.interface import Interface, implements
> from twisted.python.components import registerAdapter, Adapter
>
> class DummyAdapter(Adapter):
> pass
>
> class IDummy1(Interface):
> pass
>
> class IDummy2(Interface):
> pass
>
> class Dummy1(object):
> implements(IDummy1)
>
> registerAdapter(DummyAdapter, IDummy1, IDummy2)
>
> IDummy2(Dummy1()) # Works
> IDummy2(Dummy1) # Don't works
>
> If I use registerAdapter(DummyAdapter, type, IDummy2), this works, but I
> lose a lot of functionality (I may want to adapt other interfaces than
> IDummy1).
Read the zope.interface documentation, particularly the distinction between
providing an interface and implmenting an interface. If you want
IDummy2(Dummy1) to work, you need to declare Dummy1 as:
class Dummy1(object):
classProvides(IDummy1)
However you almost certainly do not want that class to also implement(IDummy1).
It would be very unusual for a type and its instances to both provide the same
interface.
-Andrew.
More information about the Twisted-Python
mailing list