[Twisted-Python] adapt from more than one interface
Jonathan Lange
jml at mumak.net
Sat Apr 11 20:22:08 EDT 2009
On Sun, Apr 12, 2009 at 10:31 AM, <glyph at divmod.com> wrote:
>
> On 11 Apr, 08:41 pm, esteve at sindominio.net wrote:
>>
>> factory = IFooFactory(myService)
>> factory.bar = "some value"
>>
>> it works, but I'd rather use this:
>>
>> factory = IFooFactory(myService, configurationObject)
>
> This is a long and terrible road you're about to start down. It's hard for
> me to explain exactly why it's so painful, but trust me, it is.
>
> What you're doing now, passing out-of-band arguments to the IFooFactory
> adapter, whose concrete type you are *not supposed to know* at that point in
> the control flow, is bad. But trying to force adaptation to become
> full-fledged multimethods is worse. If you want multimethods, I believe
> PEAK provides a package that implements them.
>
Also, Zope has getMultiAdapter(). The canonical example is adapting a
model object and a request object to a view object.
I don't think it's as bad as glyph says. I probably wouldn't use it in
the case you describe -- calling methods on objects is almost always
better.
jml
More information about the Twisted-Python
mailing list