-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Brian Sutherland wrote: > On Wed, Nov 25, 2009 at 05:17:17PM +0100, Thomas Lotze wrote: >> What about a simple and consistent API for all components including >> utilities, adapters and multiadapters: >> >> IFoo() >> IFoo(x) >> IFoo(x, y) > > This also doesn't allow you to use this (anti?)pattern: > > class Foo: > > implements(IFoo) > > def do_something(self): > # custom behaviour here > default_foo_adapter = getAdapter(self, IFoo) > return default_foo_adapter.do_something() # fallback to default > behaviour > > It may not be very theoretically correct, but it's something I find very > useful when writing IPublishTraverse implementing classes for > zope.publisher to traverse over. It saves me from having to inherit from > the default traverser.
Hmm, I may be missing something here, but if Foo implements IFoo, then the getAdapter lookup for it will short circuit, leading you into infinite recursion. Except that it doesn't:: $ bin/virtualenv-2.6 --no-site-packages /tmp/brian ... $ cd /tmp/brian $ bin/easy_install zope.component ... $ bin/python >>> from zope.interface import Interface >>> from zope.interface import implements >>> class IFoo(Interface): ... pass ... >>> from zope.component import getAdapter >>> class Foo: ... implements(IFoo) ... >>> foo = Foo() >>> IFoo(foo) is foo True >>> getAdapter(foo, IFoo) is foo Traceback (most recent call last): File "<stdin>", line 1, in <module> ... zope.component.interfaces.ComponentLookupError: (<__main__.Foo instance at 0xb7d0690c>, <InterfaceClass __main__.IFoo>, u'') which strikes me as wildly disjoint: the IFoo behavior is "expected" (short-circuit the lookup if the object already provides the interface), while the getAdapter behavior is a puzzlement. Tres. - -- =================================================================== Tres Seaver +1 540-429-0999 tsea...@palladion.com Palladion Software "Excellence by Design" http://palladion.com -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iEYEARECAAYFAksNmQIACgkQ+gerLs4ltQ7vgQCgyJqce5aMgNksSziaz8oBis1x ZpUAoKcVmJxbIY0gHw4L39wxaV1jbW9T =E7Cn -----END PGP SIGNATURE----- _______________________________________________ Zope-Dev maillist - Zope-Dev@zope.org https://mail.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - https://mail.zope.org/mailman/listinfo/zope-announce https://mail.zope.org/mailman/listinfo/zope )