[PEAK] PyProtocols: TypeError: Ambiguous adapter choice

luper rouch luper.rouch at gmail.com
Fri Jul 10 13:03:55 EDT 2009


2009/7/10 Sergey Schetinin <maluke at gmail.com>:
> 2009/7/10 luper rouch <luper.rouch at gmail.com>:
>> The following code produces an error:
>>
>> TypeError: ('Ambiguous adapter choice', <class
>> '__main__.FooOneAsFoo'>, <class '__main__.FooTwoAsFoo'>, 2, 2)
>>
>> --- code begins ---
>>
>> from protocols import Interface, advise
>>
>> class IFoo(Interface):
>>    pass
>>
>> class IFooOne(Interface):
>>    pass
>>
>> class IFooTwo(Interface):
>>    pass
>>
>> class FooOneAsFoo(object):
>>    advise(
>>            instancesProvide=[IFoo],
>>            asAdapterForProtocols=[IFooOne]
>>        )
>>
>> class FooTwoAsFoo(object):
>>    advise(
>>            instancesProvide=[IFoo],
>>            asAdapterForProtocols=[IFooTwo]
>>        )
>>
>> class ComposedFoo(object):
>>    advise(
>>            instancesProvide=[IFooOne, IFooTwo]
>>        )
>>
>> --- code ends ---
>>
>> Why is it ambiguous to write for example:
>>
>> foo = FooOneAsFoo(ComposedFoo())
>>
>> foo has an IFoo interface, adapted from the IFooOne interface of ComposedFoo.
>> _______________________________________________
>> PEAK mailing list
>> PEAK at eby-sarna.com
>> http://www.eby-sarna.com/mailman/listinfo/peak
>>
> Are you sure it's the "foo = FooOneAsFoo(ComposedFoo())" producing the
> error? Could it actually be IFoo(ComposedFoo()) ?
>

Actually it's the ComposedFoo definition that triggers the error.


More information about the PEAK mailing list