
On Fri, Apr 23, 2021 at 11:22 AM Larry Hastings <larry@hastings.org> wrote:
On 4/20/21 10:03 AM, Mark Shannon wrote:
If you guarded your code with `isinstance(foo, Sequence)` then I could not use it with my `Foo` even if my `Foo` quacked like a sequence. I was forced to use nominal typing; inheriting from Sequence, or explicitly registering as a Sequence.
If I'm reading the library correctly, this is correct--but, perhaps, it could be remedied by adding a __subclasshook__ to Sequence that looked for an __iter__ attribute. That technique might also apply to other ABCs in collections.abc, Mapping for example. Would that work, or am I missing an critical detail?
How would you distinguish between a Sequence and a Mapping? Both have __iter__ and __len__. Without actually calling those methods, how would the subclass hook tell them apart? ChrisA